当前位置 主页 > 网站技术 > 代码类 >

    Java日期与时间类原理解析

    栏目:代码类 时间:2020-01-29 12:09

    这篇文章主要介绍了Java日期与时间类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    基础知识

    日期: 类似于 2018-12-12 时间: 类似于 2018-12-12 12:12:12 时刻: 类似于 2018-12-12 12:12:12 地区: 计算机中的 Locale, 如 zh_CN, en_US 等, 影响着对于日期, 时间, 货币等格式的显示 EpochTime: 从 1970 年 1 月 1 日 UTC+00:00 到现在的秒数(不是毫秒数), 大致可认为与 TimeStamp 等价 时区: 全球共 24 个, 伦敦 (GMT+00:00) 的是标准时区 GMT 与 UTC 大致可以认为是等价的, GMT 与 UTC 表示的时间不受夏令时影响, 而以地区(如 America/New_York)表示的时间受夏令时影响 日期在计算机中都存储为 EpochTime(即 TimeStamp), 所以全球的计算机都是相同的, 但是因为计算机地区等设置的不同, 所以显示为不同的时间 Date 与 Calendar

    Date 的用法

    // 获取一个 Date 对象, 即表示现在的时刻
    Date date = new Date();
    // 获取 TimeStamp
    long timestamp = date.getTime();
    // timestamp 生成 Date
    date = new Date(timestamp);
    // 转换为默认格式的字符串
    String dateString = date.toString();
    // 按照指定格式转换
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateString = simpleDateFormat.format(date);
    // 按照指定格式字符串解析为 Date
    date = simpleDateFormat.parse(dateString);

    Calendar 的用法

    // 获取一个 Calendar
    Calendar calendar = Calendar.getInstance();
    // 获取今天是本月的第几天
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    // 设置为指定时间
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    // 转换为 Date
    Date date = calendar.getTime();
    // 转换为 timestamp
    long timestamp = calendar.getTimeInMillis();

    LocalDateTime 的用法

    // 获取一个 LocalDateTime
    LocalDateTime localDateTime = LocalDateTime.now();
    // 获取一个指定的 LocalDateTime, 需要注意月份从 1 开始而非 0, 所以 12 月用 12
    localDateTime = LocalDateTime.of(2018, 12, 12, 21, 36, 36);
    // LocalDateTime 格式化为指定格式
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String localDateTimeString = dateTimeFormatter.format(localDateTime);
    // 按照指定格式解析 LocalDateTime, 需要注意这里 DateTimeFormatter 是作为参数参入
    localDateTime = LocalDateTime.parse(localDateTimeString, dateTimeFormatter);
    // 减去一天, 需要注意该对象是不可变的
    localDateTime = localDateTime.minusDays(1);
    // 小时设置为 12 点
    localDateTime = localDateTime.withHour(12);
    // 设置为本月的第一天
    localDateTime = localDateTime.withDayOfMonth(1);
    // 设置为本月的最后一天, 注意这里是 TemporalAdjusters 而不是 TemporalAdjuster
    localDateTime = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
    // 判断两个 LocalDateTime 的先后
    boolean before = localDateTime.isBefore(LocalDateTime.now());
    // 计算两个 LocalDate 相差的天数
    Period period = LocalDate.now().until(LocalDate.of(2019, 1, 1));
    long days = period.getDays();
    // 计算两个 LocalDateTime 相差的天数, 可能为负数
    days = localDateTime.until(LocalDateTime.now(), ChronoUnit.DAYS);
    // 距离 EpochTime 的天数
    days = LocalDate.now().toEpochDay();
    // LocalDateTime 无法与 timestamp 进行转换, 因为它没有时区的概念