广告
返回顶部
首页 > 资讯 > 精选 >Java8中如何使用日期时间
  • 715
分享到

Java8中如何使用日期时间

2023-06-15 22:06:05 715人浏览 泡泡鱼
摘要

Java8中如何使用日期时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。初始化日期时间初始化2020年11月11日11点11分11秒时间,这样可行吗?日志输出

Java8中如何使用日期时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

初始化日期时间

初始化2020年11月11日11点11分11秒时间,这样可行吗?

Java8中如何使用日期时间

日志输出时间是3029年12月11日11点11分11秒:

date : Sat Dec 11 11:11:11 CST 3920

这明显是彩笔才会写的垃圾代码,因为

  • 年应该是和1900差值

  • 月应该是 0~11 而非 1~12

  • 时应该是 0~23,而非 1~24

Java8中如何使用日期时间

修正上述代码如下:

Date date = new Date(2020 - 1900, 10, 11, 11, 11, 11);

日志输出:

Mon Nov 11 11:11:11 CST 2019

当有国际化需求时,又得使用Calendar类初始化时间。

使用Calendar改造后,初始化时年参数直接使用当前年即可,月0~11。亦可直接使用Calendar.DECEMBER初始化月份,肯定不会犯错。

分别使用当前时区和纽约时区初始化两个相同日期:

Java8中如何使用日期时间

日志输出

Java8中如何使用日期时间

显示两个不同时间,说明时区发生作用。但更习惯年/月/日 时:分:秒日期时间格式,对现在输出的日期格式还不满意,那就格式化日期时间

3 时区问题

全球有24个时区,同一个时刻不同时区(比如中国上海和美国纽约)的时间不同。全球化项目,若初始化时间时未提供时区,那就不是真正意义上的时间,只能认为是我看到的当前时间的一个表示。

3.1 Date类

Date无时区概念,任一机器使用new  Date()初始化得到时间相同。因为,Date中保存的是UTC时间,其为以原子钟为基础的统一时间,不以太阳参照计时,无时区划分

Date中保存的是一个时间戳,代表从1970年1月1日0点(Epoch时间)到现在的毫秒数。尝试输出Date(0):

System.out.println(new Date(0)); System.out.println(TimeZone.getDefault().getID() + ":" +     TimeZone.getDefault().getRawOffset()/3600000);

得到1970年1月1日8点。我的机器在中国上海,相比UTC时差+8小时:

Thu Jan 01 08:00:00 CST 1970 Asia/Shanghai:8

对于国际化项目,处理好时间和时区问题首先就是要正确保存日期时间。

这里有两种

3.2 如何正确保存日期时间

  • 保存UTC

保存的时间无时区属性,不涉及时区时间差问题的世界统一时间。常说的时间戳或Java中的Date类就是这种方式,也是推荐方案

  • 保存字面量

比如年/月/日 时:分:秒,务必同时保存时区信息。有了时区,才能知道该字面量时间真正的时间点,否则它只是一个给人看的时间表示且只在当前时区有意义。

而Calendar才具有时区概念,所以通过使用不同时区初始化Calendar,才能得到不同时间。

正确地保存日期时间后,就是正确展示,即要使用正确时区,将时间点展示为符合当前时区的时间表示。至此也就能理解为何会发生“时间错乱”。

从字面量解析成时间 & 从时间格式化为字面量

对同一时间表示,不同时区转换成Date会得到不同时间戳

比如2020-11-11 11:11:11

Java8中如何使用日期时间

对当前上海时区/纽约时区,转化为UTC时间戳不同

Wed Nov 11 11:11:11 CST 2020:1605064271000 Thu Nov 12 00:11:11 CST 2020:1605111071000

这就是UTC的意义,并非时间错乱。对同一本地时间的表示,不同时区的人解析得到的UTC时间必定不同,反过来不同本地时间可能对应同一UTC。

格式化后出现的错乱

即同一Date,在不同时区下格式化得到不同时间表示。

在当前时区和纽约时区格式化2020-11-11 11:11:11

Java8中如何使用日期时间

输出如下,当前时区Offset(时差)是+8小时,对于-5小时的纽约

Java8中如何使用日期时间

因此,有时数据库中相同时间,由于服务器时区设置不同,读取到的时间表示不同。这不是时间错乱,而是时区作用,因为UTC时间需根据当前时区解析为正确的本地时间。

所以要正确处理时区,在于存和读两阶段

  • 存,需使用正确的当前时区来保存,这样UTC时间才会正确

  • 读,也须正确设置本地时区,才能把UTC时间转换为正确当地时间

Java8处理时区问题

时间日期类ZoneId、ZoneOffset、LocalDateTime、ZonedDateTime和DateTimeFORMatter,使用起来更简单清晰。

初始化上海、纽约和东京三时区

可使用ZoneId.of初始化一个标准时区,也可使用ZoneOffset.ofHours通过一个offset初始化一个具有指定时间差的自定义时区。

日期时间表示

  • LocalDateTime无时区属性,所以命名为本地时区的日期时间

  • ZonedDateTime=LocalDateTime+ZoneId,带时区属性

因此,LocalDateTime仅是一个时间表示,ZonedDateTime才是一个有效时间。这里将把2020-01-02  22:00:00这个时间表示,使用东京时区解析得到一个ZonedDateTime。

使用DateTimeFormatter格式化时间

可直接通过withZone直接设置格式化使用的时区。最后,分别以上海、纽约和东京三个时区来格式化这个时间输出:

Java8中如何使用日期时间

日志输出:相同时区,经过解析存和读的时间表示一样(比如最后一行)

对不同时区,比如上海/纽约,输出本地时间不同。

+9小时时区的晚上10点,对上海时区+8小时,所以上海本地时间为早10点

而纽约时区-5小时,差14小时,为晚上9点

Java8中如何使用日期时间

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Java8中如何使用日期时间

本文链接: https://www.lsjlt.com/news/281745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java8中如何使用日期时间
    Java8中如何使用日期时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。初始化日期时间初始化2020年11月11日11点11分11秒时间,这样可行吗日志输出时...
    99+
    2023-06-15
  • 深入了解Java8中的时区日期时间
    目录Java8Tester.java处理时区上一章节 Java 8 新日期时间 API ( 上 ) – 本地日期时间 我们对 Java 8 重新设计的日期时间 API 做...
    99+
    2023-05-14
    Java8时区日期时间 Java8 日期时间 Java8时区
  • Java8中的时区日期时间怎么处理
    今天小编给大家分享一下Java8中的时区日期时间怎么处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我同时也发现,这三个类...
    99+
    2023-07-05
  • 深入浅析Java8中日期与时间的特性
    深入浅析Java8中日期与时间的特性?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题。应用程序...
    99+
    2023-05-31
    java8 ava 中日
  • java8 时间日期的使用与格式化示例代码详解
    目录LocalDateLocalTimeLocalDateTimeInstantDurationPeriodZoneId时间与字符串之间的转化与旧Date API的转换LocalDa...
    99+
    2022-11-13
  • 如何使用Python中的时间和日期模块
    如何使用Python中的时间和日期模块导言:在编程中,处理时间和日期是非常常见的任务。Python提供了强大的时间和日期模块,使得处理时间和日期的操作变得更加简单和方便。本文将介绍Python中的时间和日期模块,并提供具体的代码示例,帮助读...
    99+
    2023-10-22
    Python 日期 时间
  • 如何在Shell中使用时间和日期函数
    这篇文章将为大家详细讲解有关如何在Shell中使用时间和日期函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。shell下获取系统时间的方法直接调用系统变量获取今天时期:`date +%Y%...
    99+
    2023-06-09
  • Python中time库的使用(日期时间)
    time库是python中处理时间的标准库。 计算机时间的表达:time()、ctime()、gmtime(); 提供获取系统时间并格式化输出功能: strftime()、strpt...
    99+
    2023-02-02
    Python time库使用 Python time库
  • 深入理解Java8新特性之新日期时间API的应用
    目录1.新旧对比(线程安全问题)2.LocalDate3.LocalTime4.LocalDateTime5.Instant6.Duration、Period7.TestTempor...
    99+
    2022-11-12
  • MySQL中如何把时间戳转化成日期时间
    小编给大家分享一下MySQL中如何把时间戳转化成日期时间,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!FROM_UNIXTIME(unix_timestamp,f...
    99+
    2023-06-02
  • linux中如何修改日期和时间
    linux中修改日期和时间的方法:1、打开linux系统;2、打开终端输入命令切换到管理员权限;3、输入“date”命令查看当前日期和时间;4、输入“date -s +日期”或者“date -s +时间”命令分别修改日期和时间;5、修改成功...
    99+
    2022-10-03
  • Java中Date日期时间类具体使用
    目录日期比较使用 SimpleDateFormat 格式化日期日期和时间的格式化编码使用printf格式化日期解析字符串为时间休眠(sleep)Calendar类GregorianC...
    99+
    2023-05-17
    Java Date日期时间类 Java 日期时间类
  • R语言日期时间的使用
    目录1.日期和日期时间类型2.从字符串生成日期数据3.日期显示格式4.访问日期时间的组成值5.日期舍入计算6.日期计算 6.1 时间长度  &...
    99+
    2022-11-13
  • 如何在PHP中将日期和时间转为时间戳
    在开发web应用程序时,我们经常需要将日期和时间转换为可在计算机中存储和处理的格式。时间戳就是这样一种格式。时间戳是从“UNIX纪元”开始计算的秒数,这个纪元是1970年1月1日 00:00:00 UTC。PHP是一种流行的Web开发语言,...
    99+
    2023-05-14
  • PHP中怎么运用日期时间
    PHP中怎么运用日期时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP日期时间运用大汇总:《PHP日期时间运用一:生日倒计时天数的简单实现》《PHP日期时...
    99+
    2023-06-20
  • mysql中如何计算日期和时间的间隔
    这篇文章主要介绍mysql中如何计算日期和时间的间隔,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:我们首先得明确一点,mysql间隔值主要用于日期和时间计算,如果我们要要创...
    99+
    2022-10-18
  • 如何正确的在Java中使用日期与时间API
    这篇文章将为大家详细讲解有关如何正确的在Java中使用日期与时间API,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、时间和日期在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作...
    99+
    2023-06-06
  • 如何使用 history 命令显示日期和时间
    如何使用 history 命令显示日期和时间?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。默认情况下 history 命令直接显示用户执行的命令而不会输出运行命令时的日期和...
    99+
    2023-06-10
  • 如何使用PHP将日期转换为时间戳
    本篇内容介绍了“如何使用PHP将日期转换为时间戳”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用strtotime函数PHP中的strto...
    99+
    2023-07-05
  • mysql中如何将日期转为时间戳
    本篇内容主要讲解“mysql中如何将日期转为时间戳”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中如何将日期转为时间戳”吧! ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作