关于LocalDateTime在开发中的总结

日期类分为LocalDate、LocalTime和LocalDateTime。其中LocalDateTime是一个复合类,是LocalDate和LocalTime的组成。

初始化日期类

  1. 获取当前时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
  1. 根据时间字符串
LocalDate localDate = LocalDate.parse("2021-09-06");
LocalTime localTime = LocalTime.parse("09:51:51");
LocalDateTime localDateTime = LocalDateTime.parse("2021-09-06T09:51:51");
  • 如果数字不是十位数,则前面要补0,比如 2021-9-6 和 9:51:51 都会报错。
  • LocalDateTime如果根据字符串初始化,必须使用ISO-8601模式,比如 年月日T时分秒
  1. 根据日期解析类和时间字符串
 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
 LocalDate localDate = LocalDate.parse("2021/09/06", dateTimeFormatter);

 DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("HH:mm:ss");
 LocalTime localTime = LocalTime.parse("10:52:22", dateTimeFormatter1);

 DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
 LocalDateTime localDateTime = LocalDateTime.parse("2021/09/06 10:52:22", dateTimeFormatter2);
  1. 使用Date对象进行转换
    在数据实体中,一般使用Date对象映射数据库的时间字段,在业务中需要将Date对象转换为LocalTimeDate对象。

第一种方式

Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
  • LocalDateTime.ofInstant需要两个参数,Instant类(Unix元年时间开始所经历的秒数)和时区

第二种方式

Date date = new Date();
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

获取具体时间参数

LocalDateTime等类都提供获取对应的获取时间Api,不过建议使用TemporalField来获取时间

LocalDateTime localDateTime = LocalDateTime.now();
int year = localDateTime.get(ChronoField.YEAR);
int month = localDateTime.get(ChronoField.MONTH_OF_YEAR);
int day = localDateTime.get(ChronoField.DAY_OF_MONTH);
int hour = localDateTime.get(ChronoField.HOUR_OF_DAY);
int minute = localDateTime.get(ChronoField.MINUTE_OF_DAY);
int second = localDateTime.get(ChronoField.SECOND_OF_MINUTE);

设置时间

  1. 设置相对时间
    相对时间指根据当前时间,根据参数增加或减少时间。
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.plus(1, ChronoUnit.YEARS); // 设置一年后
localDateTime.minus(1, ChronoUnit.YEARS); // 设置一年前
  • 使用ChronoUnit枚举类,可以动态的更改时间单位
  1. 设置绝对时间
    绝对时间指根据参数,设置相应时间。
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.with(ChronoField.YEAR, 2022); // 设置年份为2022
  • 使用ChronoField枚举类,可以动态的更改时间单位

注意:设置多个时间时,如果需要连续赋值,必须要将对象保存下来,再将对象再进行赋值。
没有保存对象引用

LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.minus(5, ChronoUnit.DAYS);  // 设置五天前时间
localDateTime.plus(5, ChronoUnit.YEARS)); // 设置五年后

保存对象引用

LocalDateTime localDateTime = LocalDateTime.now();
localDateTime = localDateTime.minus(5, ChronoUnit.DAYS);  // 设置五天前时间
localDateTime = localDateTime.plus(5, ChronoUnit.YEARS)); // 设置五年后的五天前时间

转化成Date对象

  1. LocalDate对象转化
LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
  1. LocalDateTime对象转化
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

根据年月字符串获取当前月第一天和最后一天

YearMonth yearMonth = YearMonth.parse(month, DateTimeFormatter.ofPattern("yyyy-MM"));
LocalDate localDate = LocalDate.of(yearMonth.getYear(), yearMonth.getMonth(), 1);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String firstDay = localDate.format(dateTimeFormatter);
String endDay = localDate.with(TemporalAdjusters.lastDayOfMonth()).format(dateTimeFormatter);
posted @   dxyoung  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示