美文网首页
Java 8 时间常用API介绍

Java 8 时间常用API介绍

作者: 晚风吹___ | 来源:发表于2021-08-11 21:22 被阅读0次
public static void main(String[] args) {
    // 当前时间
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATETIME_PATTERN);
    LocalDateTime now = LocalDateTime.now();
    String format = now.format(dateTimeFormatter);
    System.out.println("当前时间:" + format);

    // 获取当前时间戳(秒、毫秒)
    long toEpochMilli = Instant.now().toEpochMilli();
    long epochSecond = Instant.now().getEpochSecond();
    System.out.println("时间戳秒:" + epochSecond);
    System.out.println("时间戳毫秒:" + toEpochMilli);

    // 指定当前时间 21:00:00
    LocalTime localTime = LocalTime.of(21, 0, 0);
    LocalDateTime ofTime = LocalDateTime.of(LocalDate.now(), localTime);
    System.out.println("指定当前时:" + dateTimeFormatter.format(ofTime));


    // 获取月份 年份
    int month = LocalDate.now().getMonthValue();
    int year = LocalDate.now().getYear();
    System.out.println("月份:" + month);
    System.out.println("年份:" + year);

    // 获取昨天日期
    LocalDate localDate1 = LocalDate.now().minusDays(1);
    System.out.println("昨天日期:" + localDate1);

    // 获取明天日期
    LocalDate localDate2 = LocalDate.now().plusDays(1);
    System.out.println("明天日期:" + localDate2);
/**
     * 本周第一天
     *
     * @param date 传入时间
     * @return
     */
    public static Date getStartDayOfWeek(TemporalAccessor date) {
        TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
        LocalDate localDate = LocalDate.from(date);
        localDate = localDate.with(fieldIso, 1);
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 本周最后一天
     *
     * @param date 传入时间
     */
    public static Date getEndDayOfWeek(TemporalAccessor date) {
        TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
        LocalDate localDate = LocalDate.from(date);
        localDate = localDate.with(fieldIso, 7);
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }

    // 本月第几天
    int dayOfMonth = LocalDate.now().getDayOfMonth();
    System.out.println("本月第几天:" + dayOfMonth);

    // 今年第几天
    int dayOfYear = LocalDate.now().getDayOfYear();
    System.out.println("今年第几天:" + dayOfYear);

    // 获取当前是今年多少周
    int i = LocalDate.now().get(WeekFields.SUNDAY_START.weekOfYear());
    System.out.println("当前第几周:" + i);

    // 获取本月第一天
    LocalDate firstOfMonth = LocalDate.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 1);
    System.out.println("本月第一天:" + firstOfMonth);

    // 获取本月最后一天
    LocalDate lastOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
    System.out.println("本月最后一天:" + lastOfMonth);

    // 获取今年第一天
    LocalDate firstDayOfYear = LocalDate.now().with(TemporalAdjusters.firstDayOfYear());
    System.out.println("今年第一天:" + firstDayOfYear);

    // 获取今年最后一天
    LocalDate lastDayOfYear = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
    System.out.println("今年最后一天:" + lastDayOfYear);

    // 日期相等判断
    System.out.println(firstDayOfYear.isEqual(lastDayOfYear));

    // 获取今天是周几
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
    System.out.println("今天是周几呢:" + dayOfWeek);

    // date 转 LocalDateTime  方式一
    Date date = new Date();
    Instant instant = date.toInstant();
    LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
    System.out.println("date 转 LocalDateTime(1):"+ localDateTime);

    // date 转 LocalDateTime 方式二
    LocalDateTime time = instant.atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
    System.out.println("date 转 LocalDateTime(2):"+ time);

    // LocalDateTime 转 date
    LocalDateTime dateTime = LocalDateTime.now();
    ZonedDateTime zdt = dateTime.atZone(ZoneId.systemDefault());
    Date tDate = Date.from(zdt.toInstant());
    System.out.println("LocalDateTime 转 date" + tDate);


    // 时间戳转 LocalDateTime
    LocalDateTime toLocalDateTime = Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
    System.out.println("时间戳(毫秒)转 LocalDateTime " + toLocalDateTime);

    // 或者
    LocalDateTime toLocalDateTime2 = LocalDateTime.ofEpochSecond(System.currentTimeMillis() / 1000, 0, ZoneOffset.ofHours(8));
    System.out.println("时间戳(毫秒)转 LocalDateTime " + toLocalDateTime2);


    // LocalDateTime转 时间戳(秒)
    long toEpochSecond = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));
    System.out.println("LocalDateTime转 时间戳(秒)" + toEpochSecond);

    // LocalDateTime转 时间戳(毫秒)
    long epochMilli = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
    System.out.println("LocalDateTime转 时间戳(毫秒)" + epochMilli);

    
    /**
     * 总结下
     *
     * ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
     *
     * Instant: 用来表示时间线上的一个点(瞬时)
     *
     * LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
     *
     * LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
     *
     * LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
     *
     * Clock: 用于访问当前时刻、日期、时间,用到时区
     *
     * Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔
     *
     * Period: 用于计算两个“日期”间隔
     */

    // LocalDateTime 相当于 LocalDate 和 LocalTime 结合体
    // 如果出于对日期的判断用 LocalDate,如果仅仅针对时间处理 可以用 LocalTime
    // 当然LocalDateTime也同样适用
    System.out.println(new Date());


}

相关文章

网友评论

      本文标题:Java 8 时间常用API介绍

      本文链接:https://www.haomeiwen.com/subject/yoyhbltx.html