美文网首页
jdk1.8新的日期 API

jdk1.8新的日期 API

作者: 寂静的春天1988 | 来源:发表于2019-05-20 10:35 被阅读0次

转载:
作者:骑着乌龟去看海
链接:https://www.jianshu.com/p/f4abe1e38e09
来源:简书

1、 LocalDate
    // 1. 获取当前日期(年-月-日)
    LocalDate localDate = LocalDate.now();
    System.out.println(localDate.toString());
    // 2. 根据年月日构建Date
    LocalDate localDate1 = LocalDate.of(2018, 01, 30);
    // 3. 字符串转换日期,默认按照yyyy-MM-dd格式,也可以自定义格式
    LocalDate localDate2 = LocalDate.parse("2018-01-30");
    // 4. 获取本月第一天
    LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
    // 5. 获取本月第二天
    LocalDate secondDayOfMonth = localDate.withDayOfMonth(2);
    // 6. 获取本月最后一天
    LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
    // 7. 明天 -----打印输出
    LocalDate tomorrowDay = localDate.plusDays(1L);
    // 8. 昨天 -----打印输出
    LocalDate yesterday = localDate.minusDays(1L);
    // 9. 获取本年第12天
    LocalDate day = localDate.withDayOfYear(120);
    // 10. 计算两个日期间的天数
    long days = localDate.until(localDate1, ChronoUnit.DAYS);
    System.out.println(days);
    // 11. 计算两个日期间的周数
    long weeks = localDate.until(localDate1, ChronoUnit.WEEKS);
    System.out.println(weeks);
2 、LocalTime

同样,和LocalDate相对应的另一个类就是LocalTime,这个类恰好和LocalDate相反,它表示的全是时间,不包含日期。例子如下:

public static void testTime() {
    // 1. 获取当前时间,包含毫秒数 -----打印输出----- 21:03:26.315
    LocalTime localTime = LocalTime.now();
    // 2. 构建时间 -----打印输出----- 12:15:30
    LocalTime localTime1 = LocalTime.of(12, 15, 30);
    // 3. 获取当前时间,不包含毫秒数 -----打印输出----- 21:01:56
    LocalTime localTime2 = localTime.withNano(0);
    // 4. 字符串转为时间,还可以有其他格式,比如12:15, 12:15:23.233
    // -----打印输出----- 12:15:30
    LocalTime localTime3 = LocalTime.parse("12:15:30");
}
3、LocalDateTime
LocalDateTime就和原先的java.util.Date很像了,既包含日期,又包含时间,它经常和DateTimeFormatter一起使用。
public static void testDateTime() {
    // 1. 获取当前年月日 时分秒 -----打印输出----- 2018-01-29T21:23:26.774
    LocalDateTime localDateTime = LocalDateTime.now();
    // 2. 通过LocalDate和LocalTime构建 ----- 打印输出----- 2018-01-29T21:24:41.738
    LocalDateTime localDateTime1 = LocalDateTime.of(LocalDate.now(), LocalTime.now());
    // 3. 构建年月日 时分秒 -----打印输出----- 2018-01-29T19:23:13
    LocalDateTime localDateTime2 = LocalDateTime.of(2018, 01, 29, 19, 23, 13);
    // 4. 格式化当前时间 ----打印输出----- 2018/01/29
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
    System.out.println(formatter.format(localDateTime2));
    //使用LocalDateTime的with开头的方法可以设置相应的时间,小时,分钟等,比如:
    // 设置分钟数 
    LocalDateTime localDateTime = LocalDateTime.now().withMinute(23);
}
需要注意的有两点:

LocalDateTime默认的格式是 2018-01-29T21:23:26.774 这种格式,这可能与我们经常使用的格式不太符合,所以我们可以指定格式。
DateTimeFormatter本身提供了许多静态格式化常量,我们可以参考使用,如果不能满足我们的需求的话,我们可以自定义;
LocalDateTime的toString方法:
@Override
public String toString() {
    return date.toString() + 'T' + time.toString();
}
LocalDate,LocalTime,LocalDateTime这三个类基本上处理了大部分的日期,时间。而与这三个类经常结合使用的还有如下几个类:Year,Month,YearMonth,MonthDay,DayOfWeek。
并且,我们在LocalDate相关类的操作也可以通过Year,Month等来实现。
Year year =Year.now();
System.out.println(year.getValue()); // 2018
4、TemporalAdjusters
该类是一个计算用的类,提供了各种各样的计算方法。比如某个月的第一天,某个月的最后一天,某一年的第一天,某一年的第几天等各种计算方法。该类内部实现基本上全都是通过JDK8的Lambda表达式来实现的。随便举一些例子,都很简单。
LocalDate localDate = LocalDate.now();
        
// 1. 本月第一天
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
// 2. 本月最后一天
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
// 3. 本年第一天
LocalDate firstDayOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
// 4. 下个月第一天
LocalDate firstDayOfNextMonth = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
// 5. 本年度最后一天
LocalDate lastDayOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());

相关文章

网友评论

      本文标题:jdk1.8新的日期 API

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