简单的Java8时间处理API

117 阅读1分钟

`public class Demo {

/**
 * 获取当前日期 | 时间
 */
public void now() {
    // 日期
    LocalDate localDate = LocalDate.now();
    // 时间
    LocalTime localTime = LocalTime.now();
    // 日期+时间
    LocalDateTime localDateTime = LocalDateTime.now();

    System.out.println(localDate);
    System.out.println(localTime);
    System.out.println(localDateTime);
    System.out.println(new Date());
}

/**
 * LocalDateTime 和 Date 互相转换,使用instant转换,同时可以使用instant获取时间戳
 */
public void instant(){
    Date date = new Date();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    System.out.println(localDateTime);
    Date from = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    System.out.println(from);
    // instant获取时间戳
    // 毫秒
    System.out.println(localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
    // 秒
    System.out.println(localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond());
}

/**
 *  时区类是 ZoneId 和 ZoneOffset,zoneID可以查看
 */
public void zone() {
    /**
     * 创建有时区概念的ZonedDateTime
     */
    ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.now(), ZoneId.systemDefault());
    ZonedDateTime zonedDateTime1 = LocalDateTime.now().atZone(ZoneId.of("Asia/Shanghai"));
    ZonedDateTime zonedDateTime2 = LocalDateTime.now().atZone(ZoneOffset.of("+8"));
    System.out.println("zone date time: " + zonedDateTime);
    System.out.println("zone date time: " + zonedDateTime1);
    System.out.println("zone date time: " + zonedDateTime2);
}

/**
 * 格式化操作,线程安全
 */
public void format() {

    LocalDateTime now = LocalDateTime.now();

    String format1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS").format(now);
    System.out.println(format1);

    DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
            .appendValue(ChronoField.YEAR)
            .appendLiteral('-')
            .appendValue(ChronoField.MONTH_OF_YEAR)
            .appendLiteral('-')
            .appendValue(ChronoField.DAY_OF_MONTH)
            .appendLiteral(' ')
            .appendValue(ChronoField.HOUR_OF_DAY)
            .appendLiteral(':')
            .appendValue(ChronoField.MINUTE_OF_HOUR)
            .appendLiteral(':')
            .appendValue(ChronoField.SECOND_OF_MINUTE)
            .appendLiteral('.')
            .appendValue(ChronoField.MILLI_OF_SECOND)
            .toFormatter();

    String format = now.format(dateTimeFormatter);

    System.out.println(format);
}

/**
 *     Duration时间段,可以获取这段时间的总天数,总小时数等等
 */
public void duration() {
    LocalDateTime from = LocalDateTime.of(2022, Month.JUNE, 1, 12, 00);
    LocalDateTime to = LocalDateTime.of(2022, Month.JULY, 1, 12, 00);
    Duration duration = Duration.between(from, to);

    System.out.println(duration.toDays());
    System.out.println(duration.toHours());
}

/**
 * Java 8提供了丰富的时间计算方法 --> plus minus
 */
public void a() {
    LocalDateTime now = LocalDateTime.now();

    System.out.println(now.plusHours(1));
    System.out.println(now.minusHours(1));
    System.out.println(now.plusDays(1));
    System.out.println(now.minusDays(1));
}


public static void main(String[] args) {
    Demo demo = new Demo();
    demo.now();
    System.out.println("============instant==============");
    demo.instant();
    System.out.println("============zone==============");
    demo.zone();
    System.out.println("===============format================");
    demo.format();
    System.out.println("===============duration================");
    demo.duration();
    System.out.println("===============a================");
    demo.a();
}

} `