一、转换
1、转字符串
1.1、LocalDateTime与字符串
//LocalDateTime 转 字符串
String str = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
//字符串 转 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse("2019-06-26 19:00:00",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
1.2、LocalDate与字符串
/**
* String转LocalDate
* @param dateStr 日期的字符串
* @param pattern 格式示例: yyyy-MM-dd
* @return
*/
public static LocalDate toLocalDate(String dateStr, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(dateStr, formatter);
}
/**
* LocalDate转String
* @param localDate localDate对象
* @param pattern 格式示例: yyyy-MM-dd
* @return
*/
public static String LocalDatetoStr(LocalDate localDate, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return localDate.format(formatter);
}
2、与Date
// Date 转 LocalDateTime 与 LocalDate
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
//也可以使用LocalDateTime的FactoryInput()方法使用系统的默认时区
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
2小时2分8秒
Process finished with exit code 0
注:严格间隔不足24小时的相差天数会得到0,如果不考虑具体的时分秒可转换为LocalDate类型再求值。
四、日期格式化
JDK8之前:SimpleDateFormat来进⾏格式化,但SimpleDateFormat并不是线程安全的
JDK8之后:引⼊线程安全的⽇期与时间DateTimeFormatter
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = dtf.format(ldt);
System.out.println(ldtStr);
获取指定的⽇期时间对象
LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
System.out.println(ldt);
五、常用API
public static void main(String[] args) throws InterruptedException {
System.out.println("当前日期:");
LocalDate currentDate = LocalDate.now();
System.out.println(currentDate);
System.out.println("----------------------------------");
System.out.println("当前日期的周一与周日:");
LocalDate monday = currentDate.with(DayOfWeek.MONDAY);
LocalDate sunday = currentDate.with(DayOfWeek.SUNDAY);
System.out.println(monday + " 与 " + sunday);
System.out.println("----------------------------------");
System.out.println("当天周日期:");
String currentDayOfWeek = currentDate.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
System.out.println(currentDayOfWeek);
System.out.println(currentDate.getDayOfWeek().getValue());
System.out.println("----------------------------------");
System.out.println("当月第一天日期:");
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(firstDayOfMonth);
System.out.println("----------------------------------");
System.out.println("当月最后一天日期:");
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(lastDayOfMonth);
System.out.println("----------------------------------");
System.out.println("当月最后一天周日期:");
String lastDayOfWeek = lastDayOfMonth.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
System.out.println(lastDayOfWeek);
System.out.println("----------------------------------");
System.out.println("当前日期后天周日期(数字):");
System.out.println(currentDate.plusDays(2).getDayOfWeek().getValue());
System.out.println("----------------------------------");
System.out.println("当天开始时间与结束时间:");
System.out.println(LocalDate.now().atStartOfDay());
System.out.println(LocalDate.now().atTime(LocalTime.MIN));
System.out.println(LocalDate.now().atTime(LocalTime.MAX));
}
注:
System.out.println(LocalDate.now().atTime(LocalTime.MIN));
System.out.println(LocalDate.now().atTime(LocalTime.MAX));
如果是LocalDateTime类型需使用下面API达到相同效果
LocalDateTime.now().with(LocalTime.MIN)
LocalDateTime.now().with(LocalTime.MAX);
//手动设置具体时分秒
LocalDateTime.of(LocalDate.now(),LocalTime.of(10,0,0));
或者:
LocalDate.now().atTime(LocalTime.of(10,0,0));
扩展:
TemporalAdjuster:时间矫正器
有时我们可能需要获取一个周末,或者下一个工作日等时间,这里 java8 就为我们提供了一个时间校正器,让我们对时间进行校准。
TemporalAdjusters:该类通过静态方法提供了大量的常用的TemporalAdjuster的实现供我们使用。
在localDateTime中,有一个with方法,其中可以让我们去写一TemporalAdjuster接口,而TemporalAdjusters类中,有许多常用的方法
TemporalAdjusters 包含许多静态方法,可以直接调用,以下列举一些:
方法名描述 dayOfWeekInMonth 返回同一个月中每周的第几天 firstDayOfMonth 返回当月的第一天 firstDayOfNextMonth 返回下月的第一天 firstDayOfNextYear 返回下一年的第一天 firstDayOfYear 返回本年的第一天 firstInMonth 返回同一个月中第一个星期几 lastDayOfMonth 返回当月的最后一天 lastDayOfNextMonth 返回下月的最后一天 lastDayOfNextYear 返回下一年的最后一天 lastDayOfYear 返回本年的最后一天 lastInMonth 返回同一个月中最后一个星期几 next / previous 返回后一个/前一个给定的星期几 nextOrSame / previousOrSame 返回后一个/前一个给定的星期几,如果这个值满足条件,直接返回
参考文章:
https://blog.csdn.net/qq_44749491/article/details/130123065
Original: https://www.cnblogs.com/better-farther-world2099/p/11912052.html
Author: 奕锋博客
Title: Java8 日期时间API
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684150/
转载文章受原作者版权保护。转载请注明原作者出处!