什么是时区?时区与日期有什么关系?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是时区?时区与日期有什么关系?相关的知识,希望对你有一定的参考价值。
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。时区通过设立一个区域的标准时间部分地解决了这个问题。世界各个国家位于地球不同位置上,因此不同国家的日出、日落时间必定有所偏差。这些偏差就是所谓的时差。将全球分为为24个时区(东、西各12个时区)。地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算,这给人们带来不便。
所以为了克服时间上的混乱,1884年在华盛顿召开的一次国际经度会议(又称国际子午线会议)上,规定规定英国(格林尼治天文台旧址)为中时区(零时区)、东1-12区,西1-12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。每个时区的中央经线上的时间就是这个时区内统一采用的时间,称为区时,相邻两个时区的时间相差1小时。例如,中国东8区的时间总比泰国东7区的时间早1小时,而比日本东9区的时间迟1小时。因此,出国旅行的人,必须随时调整自己的手表,才能和当地时间相一致。
等等
谢谢
望采纳! 参考技术A 时区是全球统一时间的划分区域,以0°经线为起点,向东、向西各7.5°为0时区,分别向东、向西每隔15°为1个时区,共24个时区。
0时区向东每隔15°为1个时区,东经度共有11个时区,东12区是东经172.5°-180°
0时区向西每隔15°为1个时区,西经度共有11个时区,西12区是西经172.5°-180°。所以合称东西十二区。依据时区换算原则:东+西-,同-异+,东十二区比西十二区早24小时,从东十二区向东入西十二区就必须减一天(24小时)全球时间才能统一,所以东西十二区的中央经线180°成为国际日期变更线。
为什么org.joda.time.LocalDate是没有时区的日期?
我认为org.joda.time.LocalDate
这个名字有点令人困惑。文件说:
LocalDate
是一个不可变的日期时间类,表示没有时区的日期。
相比之下,org.joda.time.DateTime
说:
DateTime
根据时区计算其字段。
我总是混淆那两个,所以我希望有人能告诉我为什么这些名字应该有意义。
这是我的直觉:本地日期或时间对象将代表一个时间点,但与位置有关。因此它应该包含时区信息,因为时区也为您提供某种位置信息。在任何情况下,你都知道更多关于某些人的位置而不是那个时区。
日期时间,至少听起来像,应该只代表一个日期和时间。从这个意义上说,它只是1970年1月1日星期四00:00:00世界协调时间(UTC)以来的long
值。
那么为什么它实际上是相反的呢?每当我与时间戳有关时,这个命名都会让我感到困惑。有人可以解释一下吗?
更新:
有趣的链接发布了user:https://sourceforge.net/p/threeten/mailman/message/29962542/
Terminology
你的直觉与Joda-Time和java.time使用的术语相反。
两个框架都有一个名为LocalDate
的类,用于表示没有时间且没有时区的仅限日期的值。 “本地”意味着“可以是任何地方,而不是任何特定地点”。
“本地......”课程只是一个时间的粗略概念。他们不在时间表上。在应用时区或从UTC偏移以获取时间轴上的实际时刻之前,它们没有任何实际意义。当你看到“本地”时会想:“在我们应用时区之前,这个值才真正有意义”。
例如,我们说今年圣诞节是在2016-12-25。但在任何特定时刻,世界各地的日期都不一样。例如,巴黎早些时候比蒙特利尔更新。因此,为了获得巴黎圣诞节开始的那一刻,您必须申请Europe/Paris
时区并获得当天的第一个时刻。第一个时刻将由Joda-Time中的DateTime
和java.time中的ZonedDateTime
(或OffsetDateTime
)表示。
例如,在java.time中:
LocalDate xmas2016 = LocalDate.of( 2016 , 12 , 25 );
ZonedDateTime xmas2016FirstMomentMontreal = xmas2016.atStartOfDay( ZoneId.of( "America/Montreal" ) );
java.time
在java.time框架中,UTC中时间轴上的时刻由Instant
类表示。
Instant now = Instant.now();
应用时区ZoneId
来获得ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
如果您拥有的是从UTC而不是全时区的偏移,那么使用OffsetDateTime
而不是ZonedDateTime
。
你可以这样思考:
Instant + ZoneId - > ZonedDateTime
Instant + ZoneOffset - > OffsetDateTime
StackOverflow上已经覆盖了这些信息数百次。请搜索以了解更多信息并查看许多示例代码。
以上是关于什么是时区?时区与日期有什么关系?的主要内容,如果未能解决你的问题,请参考以下文章