java8-时间日期API
1、传统时间格式化的线程安全问题#
SimpleDateFormat 是线程不安全的
2、LocalDate , LocalTime, LocalDateTime #
public void test(){ //获取当前时间 LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); //获取某个具体的时间 LocalDateTime ldt2 = LocalDateTime.of(2021, 2, 3, 22, 10); System.out.println(ldt2); //年的加减 LocalDateTime ldt3 = ldt.plusYears(1); System.out.println(ldt3); //获取某个时间的年、月、日 System.out.println(ldt.getYear()); System.out.println(ldt.getMonth()); }
3、Instant: 时间戳(以Unix:1970年1月1日00:00:00 到某个时间之间的毫秒值)#
@Test public void test2(){ //默认获取 UTC 时区(美国那边的时区) Instant ins1 = Instant.now(); System.out.println(ins1); //标准时区偏移8小时 OffsetDateTime offsetDateTime = ins1.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); //时间转化为毫秒 System.out.println(ins1.toEpochMilli()); }
4、Duration: 计算两个时间之间的间隔 Period: 计算两个日期之间的间隔#
@Test public void test3() throws InterruptedException { Instant ins1 = Instant.now(); Thread.sleep(1000); Instant ins2 = Instant.now(); Duration duration = Duration.between(ins1, ins2); System.out.println("两个时间相差:"+duration.getSeconds()+"s"); LocalDate ld1 = LocalDate.of(2021, 2, 10); LocalDate now = LocalDate.now(); Period between = Period.between(ld1, now); System.out.println(between); System.out.println(between.getDays()); }
5、时间矫正器#
TemporalAdjuster:时间矫正器。有时候我们需要获取例如:将日期调整到 ”下个周日“等操作
TemporalAdjusters:该类通过静态方法提供了大量的常用 TemporalAdjuster的实现
例如获取下个周日:
LocalDate nextSunday = LocalDate.now() .with(TemporalAdjusters.next(DayOfWeek.SUNDAY))
public void test1(){ LocalDateTime ldt = LocalDateTime.now(); System.out.println("当前时间为:"+ldt); //求下一个周日 LocalDateTime nextSunday = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); System.out.println("下一个周日为:"+nextSunday); //自定义: 下一个工作日 // 传进来的参数 l ,其实就是 ldt LocalDateTime nextweekday = ldt.with((l) -> { LocalDateTime local = (LocalDateTime)l; DayOfWeek dayOfWeek = local.getDayOfWeek(); if(dayOfWeek.equals(DayOfWeek.FRIDAY)){ return local.plusDays(3); }else if(dayOfWeek.equals(DayOfWeek.SATURDAY)){ return local.plusDays(2); }else{ return local.plusDays(1); } }); System.out.println(nextweekday); }
6、时间格式化与时区的处理#
1) 时间格式化
public void test(){ // 时间转化为固定格式的字符串 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss"); LocalDateTime ldt = LocalDateTime.now(); String result = ldt.format(formatter); System.out.println(result); //固定格式的字符串转化为时间 //这里不知道哪儿出错了... LocalDateTime parse = ldt.parse(result,formatter); System.out.println(parse); }
2)时区处理
//ZoneDate ZoneTime ZoneDateTime @Test public void test1(){ //1、查看所有支持时区 Set<String> availableZoneIds = ZoneId.getAvailableZoneIds(); System.out.println(availableZoneIds); //2、创建时间时,指定时区 LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Aden")); //或者 LocalDateTime ldt2 = LocalDateTime.now(); ZonedDateTime zonedDateTime = ldt2.atZone(ZoneId.of("Asia/Aden")); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?