<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Java_and_time</id>
	<title>Java and time - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=Java_and_time"/>
	<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Java_and_time&amp;action=history"/>
	<updated>2026-06-02T22:20:23Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=Java_and_time&amp;diff=3774&amp;oldid=prev</id>
		<title>Riguz：​Riguz移动页面Blog:Java中的时间至Java and time，不留重定向</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Java_and_time&amp;diff=3774&amp;oldid=prev"/>
		<updated>2023-12-19T05:56:38Z</updated>

		<summary type="html">&lt;p&gt;Riguz移动页面&lt;a href=&quot;/index.php?title=Blog:Java%E4%B8%AD%E7%9A%84%E6%97%B6%E9%97%B4&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Blog:Java中的时间（页面不存在）&quot;&gt;Blog:Java中的时间&lt;/a&gt;至&lt;a href=&quot;/Java_and_time&quot; title=&quot;Java and time&quot;&gt;Java and time&lt;/a&gt;，不留重定向&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年12月19日 (二) 05:56的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;zh-Hans-CN&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki_db:diff:1.41:old-2555:rev-3774 --&gt;
&lt;/table&gt;</summary>
		<author><name>Riguz</name></author>
	</entry>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=Java_and_time&amp;diff=2555&amp;oldid=prev</id>
		<title>imported&gt;Riguz：​你如果以为，Java中谈到时间仅仅就意味着`java.util.Date`那就大错特错了，Java中的时间其实可以说五花八门，Java8发布后又增加了一些新的用来表示日期和时间的类，那么我们在构建应用程序的时候到底应该用哪个类来呢？彼此之间又有什么区别？</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=Java_and_time&amp;diff=2555&amp;oldid=prev"/>
		<updated>2019-11-07T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;你如果以为，Java中谈到时间仅仅就意味着`java.util.Date`那就大错特错了，Java中的时间其实可以说五花八门，Java8发布后又增加了一些新的用来表示日期和时间的类，那么我们在构建应用程序的时候到底应该用哪个类来呢？彼此之间又有什么区别？&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;你如果以为，Java中谈到时间仅仅就意味着`java.util.Date`那就大错特错了，Java中的时间其实可以说五花八门，Java8发布后又增加了一些新的用来表示日期和时间的类，那么我们在构建应用程序的时候到底应该用哪个类来呢？彼此之间又有什么区别？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 关于时间的表示=&lt;br /&gt;
通常由于文化和地区的不同，世界上各个地方的人们对于时间的表达方式都不尽相同，比如在中国以前用农历和十二时辰来表示，而在西方是二十四小时制（巧合的是正好一个时辰能对应上两个小时，据称与”高合成数“有关）。那么在计算机领域，在表示时间的时候也有不同的表示方法，比较常见的有：&lt;br /&gt;
&lt;br /&gt;
* 通过计算当前时间到Jan 01 1970(Unix Epoch)这一天（准确的说是00：00）经过的秒数来表示，例如 `1573090869`。&lt;br /&gt;
* 比较直接的方法就是直接以时分秒的形式表示当地时间，同时将当地的时区加进去，例如 `2001-07-04T12:08:56.235-07:00`&lt;br /&gt;
&lt;br /&gt;
= Java中的时间类=&lt;br /&gt;
抛开时间戳不谈，在Java中专门用来表示时间的其他类有：&lt;br /&gt;
&lt;br /&gt;
Class                     Since       Description&lt;br /&gt;
------------------------- ----------- -----------------------&lt;br /&gt;
java.util.Date            JDK1.0      日期+时间&lt;br /&gt;
java.util.Calendar        JDK1.1&lt;br /&gt;
java.sql.Date                         只包含日期&lt;br /&gt;
java.sql.Time                         只包含时间&lt;br /&gt;
java.sql.Timestamp&lt;br /&gt;
java.time.Instant         JDK1.8     &lt;br /&gt;
java.time.LocalTime       JDK1.8&lt;br /&gt;
java.time.LocalDate       JDK1.8&lt;br /&gt;
java.time.OffsetTime      JDK1.8&lt;br /&gt;
java.time.OffsetDateTime  JDK1.8&lt;br /&gt;
java.time.ZonedDateTime   JDK1.8&lt;br /&gt;
&lt;br /&gt;
在Java8之前，我们通常用`java.util.Date`来表示时间，虽然没啥需求实现不了的，但有着以下的问题：&lt;br /&gt;
&lt;br /&gt;
* 时间类不统一，`java.util`和`java.sql`包中都有关于时间的类，而时间格式化的又在`java.text`包中，有点乱的很&lt;br /&gt;
* 所有时间的类都是mutable的，非线程安全&lt;br /&gt;
&lt;br /&gt;
所以Java8开始对时间进行了修改，使用起来将更加方便。通常来讲，对于需要处理时区问题的系统，`OffsetDateTime`是一个较好的选择，即包含了时间信息，又包含了时区的信息，可以得到准确的时间表述。官方文档中也建议使用：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;It is intended that ZonedDateTime or Instant is used to model data in simpler applications. This class may be used when modeling date-time concepts in more detail, or when communicating to a database or in a network protocol.&lt;br /&gt;
&lt;br /&gt;
在处理类似时间转换的时候，可以借助`ZonedDateTime`来实现。例如有一个`yyyyMMddHHmmss`格式的时间，但该时间是`CST`时间，这个时间有如下的特点：&lt;br /&gt;
&lt;br /&gt;
* 在夏季时间相当于utc+5&lt;br /&gt;
* 在冬季相当于utc+6&lt;br /&gt;
&lt;br /&gt;
而每年会有一个时间点去切换这个夏季时间和冬季时间（称之为day-saving)，而且不是一个固定的日期（大致相当于按照第几个星期几来算的），要想把这个时间转换为标准的时间描述，可以采取这样的方式:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
LocalDateTime localDateTime = LocalDateTime.parse(&lt;br /&gt;
    &amp;quot;20191010095425&amp;quot;, DateTimeFormatter.ofPattern(&amp;quot;yyyyMMddHHmmss&amp;quot;));&lt;br /&gt;
ZonedDateTime zonedDateTime = ZonedDateTime.of(&lt;br /&gt;
    localDateTime, TimeZone.getTimeZone(&amp;quot;CST&amp;quot;));&lt;br /&gt;
OffsetDateTime result = zonedDateTime&lt;br /&gt;
    .toOffsetDateTime()&lt;br /&gt;
    .withOffsetSameInstant(ZoneOffset.UTC);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://stackoverflow.com/questions/30234594/whats-the-difference-between-java-8-zoneddatetime-and-offsetdatetime What&amp;#039;s the difference between java 8 ZonedDateTime and OffsetDateTime?]&lt;br /&gt;
* [https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html OffsetDateTime]&lt;br /&gt;
* [https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html ZonedDateTime]&lt;/div&gt;</summary>
		<author><name>imported&gt;Riguz</name></author>
	</entry>
</feed>