百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

带有时区的字符怎样转换为时间及Java 8中日期 与 Calendar 转换

bigegpt 2024-10-25 10:22 24 浏览

概述

Java 8 日期,时间常用操作及格式化。

重点怎么把时间戳转换为带有时区的时间字符串?

带有时区的字符串怎样转换为时间?

Java 8中时间,日期 与Date, Calendar 怎样互转?

Java 6,7中想使用Java 8中的日期处理,应该怎么解决?

Chrono Units Enum

一套标准的日期期间单位。

这套单元提供基于单元的访问来操作日期、时间或日期时间。单位的标准可以通过实施扩展

1. LocalDate date = LocalDate.now(); 
2. System.out.println("current date is :" + 
3. date); 
4. // adding 2 years to the current date 
5. LocalDate year = 
6. date.plus(2, ChronoUnit.YEARS); 
7. 
8. System.out.println("next to next year is " + 
9. year); 
10. // adding 1 month to the current data 
11. LocalDate nextMonth = 
12. date.plus(1, ChronoUnit.MONTHS); 
13. 
14. System.out.println("the next month is " + 
15. nextMonth); 
16. // adding 1 week to the current date 
17. LocalDate nextWeek = 
18. date.plus(1, ChronoUnit.WEEKS); 
19. 
20. System.out.println("next week is " + nextWeek); 
21. 
22. // adding 2 decades to the current date 
23. LocalDate Decade = 
24. date.plus(2, ChronoUnit.DECADES); 
25. 
26. System.out.println("20 years after today " + 
27. Decade);

输出结果

1. current date is :2018-04-09 
2. next to next year is 2020-04-09 
3. the next month is 2018-05-09 
4. next week is 2018-04-16 
5. 20 years after today 2038-04-09 

Temporal Adjusters

包含常用日期获取常量参数。

1. LocalDate date = LocalDate.now(); 
2. System.out.println("the current date is "+ 
3. date); 
4. 
5. // to get the first day of next month 
6. LocalDate dayOfNextMonth = 
7. date.with(TemporalAdjusters. 
8. firstDayOfNextMonth()); 
9. 
10. System.out.println("firstDayOfNextMonth : " + 
11. dayOfNextMonth ); 
12. 
13. // get the next saturday 
14. LocalDate nextSaturday = 
15. date.with(TemporalAdjusters. 
16. next(DayOfWeek.SATURDAY)); 
17. 
18. System.out.println("next satuday from now is "+ 
19. nextSaturday); 
20. 
21. // first day of current month 
22. LocalDate firstDay = 
23. date.with(TemporalAdjusters. 
24. firstDayOfMonth()); 
25. 
26. System.out.println("firstDayOfMonth : " + 
27. firstDay); 
28. 
29. // last day of current month 
30. LocalDate lastDay = 
31. date.with(TemporalAdjusters. 
32. lastDayOfMonth()); 
33. 
34. System.out.println("lastDayOfMonth : " + 
35. lastDay); 

常用方法

如果上面表格中列出的方法不能满足你的需求,你还可以创建自定义的TemporalAdjuster接口的实现,TemporalAdjuster也是一个函数式接口,所以我们可以使用Lambda表达式:

@FunctionalInterfacepublic interface TemporalAdjuster { Temporal adjustInto(Temporal temporal);}

计算下个工作日,跳过周六,周天。

1. LocalDate date = LocalDate.of(2019, 10, 11); 
2. LocalDateTime localDateTime2 = date.with(temporal -> { 
3. // 当前日期 
4. DayOfWeek dayOfWeek = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK)); 
5. 
6. // 正常情况下,每次增加一天 
7. int dayToAdd = 1; 
8. 
9. // 如果是星期五,增加三天 
10. if (dayOfWeek == DayOfWeek.FRIDAY) { 
11. dayToAdd = 3; 
12. } 
13. 
14. // 如果是星期六,增加两天 
15. if (dayOfWeek == DayOfWeek.SATURDAY) { 
16. dayToAdd = 2; 
17. } 
18. 
19. return temporal.plus(dayToAdd, ChronoUnit.DAYS); 
20. }).atStartOfDay(); 
21. System.out.println(localDateTime2); 
22. //结果 
23. 2019-10-14T00:00 

与旧日期兼容

Date, Calendar通过Instant转换为LocalDateTime

1. Date date = new Date(); 
2. Calendar calendar = Calendar.getInstance(); 
3. LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); 
4. System.out.println("date to localDateTime "+localDateTime); 
5. LocalDateTime localDateTime1= LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); 
6. System.out.println("calendar to localDateTime "+localDateTime1); 

Instant 转化为 Date,Calendar

Instant 转换Date可以直接通过from 方法构建。

Instant 转换 Calendar,先转换ZonedDateTime,在使用GregorianCalendar from 方法。

1. Instant instant = Instant.now(); 
2. Date myDate = Date.from(instant); 
3. ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); 
4. Calendar cal1 = GregorianCalendar.from(zdt);

日期格式化

新的日期API中提供了一个DateTimeFormatter类用于处理日期格式化操作,它被包含在java.time.format包中,Java 8的日期类有一个format()方法用于将日期格式化为字符串,该方法接收一个DateTimeFormatter类型参数:

1. LocalDateTime dateTime = LocalDateTime.now(); 
2. String strDate1 = dateTime.format(DateTimeFormatter.BASIC_ISO_DATE); 
3. System.out.println("BASIC_ISO_DATE time"+strDate1); 
4. String strDate2 = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE); 
5. System.out.println("ISO_LOCAL_DATE time"+strDate2); 
6. String strDate3 = dateTime.format(DateTimeFormatter.ISO_LOCAL_TIME); 
7. System.out.println("ISO_LOCAL_TIME time"+strDate3); 
8. String strDate4 = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); 
9. System.out.println("yyyy-MM-dd time"+strDate4); 
10. String strDate5 = dateTime.format(DateTimeFormatter.ofPattern("今天是:yyyy年 MM月 dd日 ", Locale.CHINESE)); 
11. System.out.println("Locale.CHINESE time"+strDate5); 

输出结果

1. BASIC_ISO_DATE time20191015 
2. ISO_LOCAL_DATE time2019-10-15 
3. ISO_LOCAL_TIME time15:01:26.614 
4. yyyy-MM-dd time2019-10-15 
5. Locale.CHINESE time今天是:2019年 10月 15日 

时间戳转换时间字符串(带有时区格式)

1. String s = Instant.ofEpochMilli(System.currentTimeMillis()). 
2. atZone(ZoneId.systemDefault()) 
3. .format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")); 
4. System.out.println(s);

输出结果

5. 2019-10-15T15:03:30.995+0800

日期类也支持将一个字符串解析成一个日期对象,带有时区格式

1. String strDate6 = "2019-01-01"; 
2. String strDate7 = "2019-10-15T15:03:30.995+0800"; 
3. LocalDate date1 = LocalDate.parse(strDate6, DateTimeFormatter.ofPattern("yyyy-MM-dd")); 
4. LocalDateTime dateTime1 = LocalDateTime 
5. .parse(strDate7, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")); 
6. System.out.println(date1); 
7. System.out.println(dateTime1);

输出结果

1. 2019-01-01 
2. 2019-10-15T15:03:30.995

第三方日期工具

threetenbp Backport of JSR-310 from JDK 8 to JDK 7 and JDK 6. NOT an implementation of the JSR.

1. <dependency> 
2. <groupId>org.threeten</groupId> 
3. <artifactId>threetenbp</artifactId> 
4. <version>1.4.0</version> 
5. </dependency> 

Joda-Time是一个出来日期时间的库,JDK1.8的API,引入的java.time包,其实也是借鉴了Joda-Time。

1. <dependency> 
2. <groupId>joda-time</groupId> 
3. <artifactId>joda-time</artifactId> 
4. <version>2.10.4</version> 
5. </dependency> 

总结

上面主要是总结了,java 8中日期,时间常用操作及处于java 6,java7 中使用新API的解决方案。

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...