精华内容
下载资源
问答
  • 2021-01-15 14:26:56

    全球一共划分为24个时区,每个时区跨度为15°。其中以英国伦敦的格林尼治天文台所在地为0°,往东7.5°,往西7.5°为0时区。

    北京位于东105°至东120°之间,为东八区。东西十二区为同一区,东西十二区的中间线即180°经线。

    国际日界线,位于太平洋中的180°经线,作为地球上今天和昨天的分界线,实际上为一条折线。

    CST 美国,澳大利亚,中国或者古巴的标准时间

    UTC  世界统一时间

    GMT 格林尼治中央区时

     

    更多相关内容
  • 一般的想法是,在您的应用程序内部,简单的用户 UTC 作为您的时区/本地,并且仅更改您的时间的本地化/规范化版本以在您的应用程序中表示视图。 例如,当特定语言环境的用户与您的应用程序交互时。 该库旨在...
  • C语言实现时区转换函数...24个时区(由1-24表示)  在 pg_proc.h 添加函数定义 src/include/catalog/pg_proc.h DATA(insert OID = 6668 ( timezone_convert PGNSP PGUID 12 1 0 0 0 f f f f t f i 3 0 1114 "1114
  • 然后,紧接着,我又提出了以下问题:为什么以下代码无法得到美国时间。(在东八区的计算机上)System.out.println(Calendar.getInstance(TimeZone.getTimeZone(“America/Los_Angeles”)).getTime());接下来,本文就...

    在Java中,如何获取不同时区的当前时间?

    你知道这道题的正确答案应该如何回答吗?背后的原理又是什么呢?

    然后,紧接着,我又提出了以下问题:

    为什么以下代码无法得到美国时间。(在东八区的计算机上)

    System.out.println(Calendar.getInstance(TimeZone.getTimeZone(“America/Los_Angeles”)).getTime());

    接下来,本文就围绕这两个问题,来带领读者一起学习一下哪些和Java中的时间有关的概念。

    时区

    前面提到了时区,可能很多读者不知道什么是时区,先来简单介绍一下。

    时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。

    世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。

    为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。这样使用起来就很方便。

    世界时区

    现今全球共分为24个时区。由于实用上常常1个国家,或1个省份同时跨着2个或更多时区,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。所以时区并不严格按南北直线来划分,而是按自然条件来划分。例如,中国幅员宽广,差不多跨5个时区,但为了使用方便简单,实际上在只用东八时区的标准时即北京时间为准。

    格林威治时间

    前面提到了,时区通过设立一个区域的标准时间部分地解决了不同地方看到的太阳位置不一样而无法定义时间的问题。那么这个标准时间是什么呢?

    前面还提到。中国位于东八区,一般是用GMT+8来表示东八区这个时区。那么,看起来GMT就是这个所谓的标准时间。GMT是个什么东西呢?为什么要在他的基础上+8来表示东八区呢?

    GMT,是Greenwich Mean Time的缩写,及格林尼治(格林威治)平时,是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。

    格林威治子午线

    自1924年2月5日开始,格林尼治天文台负责每隔一小时向全世界发放调时信息。国际天文学联合会于1928年决定,将由格林威治平子夜起算的平太阳时作为世界时,也就是通常所说的格林威治时间

    一般使用GMT+8表示中国的时间,是因为中国位于东八区,时间上比格林威治时间快8个小时。

    北京时间还可以用CST表示,即China Standard Time,又名中国标准时间,是中国的标准时间。当格林威治时间为凌晨0:00时,中国标准时间正好为上午8:00。

    所以,有等式:CST=GMT +8 小时

    时间戳

    前面提到了全世界各个时区的时间可能都是不一样的,那么有没有一个什么样的办法可以不受时区的限制,可以精确的表示时间呢。

    其实是有的,这个方法就是时间戳。

    时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

    时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

    有了时间戳,无论我们深处哪个时区,从格林威治时间1970年01月01日00时00分00秒到现在这一时刻的总秒数应该是一样的。所以说,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

    1970-01-01

    不知道大家有没有注意到一个比较特殊的时间,1970-01-01,相信每一个开发者对这个时间都并不陌生。一般如果软件系统中出现这个时间的时候,代表着出现了网络故障、线上bug等。

    微信手机充值Bug

    当有些计算机存储或者传输时间戳出错时,这个时间戳就会取默认值。而在计算机中,默认值通常是 0。

    当 Timestamp 为 0,就表示时间(GMT)1970年1月1日0时0分0秒。中国使用北京时间,处于东 8 区,相应就是早上 8 点。因此在中国这边,时间出错了,就经常会显示成 1970年1月1日 08:00。

    System.out.println(new Date(0)); //Thu Jan 01 08:00:00 CST 1970

    当我们在Java代码中使用new Date(0)来创建时间的时候,得到的结果就是Thu Jan 01 08:00:00 CST 1970,既1970年1月1日 上午08点整。

    Date

    前面提到了java.util.Java中的Date类,这个类通常用来表示时间。你可以通过getTime()方法访问java.util.Date实例的日期和时间,比如像这样:

    Date date = new Date(); long time = date.getTime();

    以上代码,其实得到的就是时间戳,在源码中也有明确的表述:

    所以,我们就可以认为java.util.Java其实表示的就是从格林威治1970年1月1日零点到现在这一时刻的总秒数。

    从Date的源码中也可以看到,Date中是不包含时区有关的信息的,因为时间戳和时区没有关系。

    那么,如果想要把一个时间戳转换成不同时区的时间输出应该怎么做呢?

    显示不同时区的时间

    想要把时间戳转换成对应时区的时间,总要有个地方可以获取时区吧。其实,我们的计算机中是有时区相关的信息的。

    无论我们使用的是哪种操作系统的电脑,都是可以查看时间的,而一般情况下,我们拿到的电脑都会展示中国时间,那是因为操作系统中已经设置了一个默认时区。

    其实,Java中的时区信息也是从操作系统中取到的,默认情况下会使用操作系统的时区。

    当我们使用System.out.println来输出一个时间的时候,他会调用Date类的toString方法,而该方法会读取操作系统的默认时区来进行时间的转换。

    主要代码如上。也就是说如果我们想要通过System.out.println输出一个Date类的时候,输出美国洛杉矶时间的话,就需要想办法把defaultTimeZone改为America/Los_Angeles,这个方法就是:

    TimeZone.setDefault(TimeZone.getTimeZone(“America/Los_Angeles”));

    所以,当我们想要输出美国洛杉矶时间时,可以选择这种方式:

    TimeZone.setDefault(TimeZone.getTimeZone(“America/Los_Angeles”)); Date date =new Date();System.out.println(date);

    还有一种方式,就是通过SimpleDateFormat来处理,这种方式我们在为什么阿里巴巴禁止把SimpleDateFormat定义为static类型的中也介绍过。这里就不再展开了。

    接下来,我们再回到文章开始的那个问题:

    为什么以下代码无法得到美国时间。(在东八区的计算机上)

    System.out.println(Calendar.getInstance(TimeZone.getTimeZone(“America/Los_Angeles”)).getTime());

    其实答案前面也已经说过了,我们通过查看Date.toString的源码,发现在输出的过程中该方法只会去获取系统的默认时区,只有修改了默认时区才会显示该时区的时间。

    但是,通过阅读Calendar的源码,我们可以发现,getInstance方法虽然有一个参数可以传入时区,但是并没有将默认时区设置成传入的时区。

    而在Calendar.getInstance.getTime后得到的时间只是一个时间戳,其中未保留任何和时区有关的信息,所以,在输出时,还是显示的是当前系统默认时区的时间。

    Java 8与时区

    了解Java8 的朋友可能都知道,Java8提供了一套新的时间处理API,这套API比以前的时间处理API要友好的多。

    Java8 中加入了对时区的支持,带时区的时间为分别为:ZonedDate、ZonedTime、ZonedDateTime。其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式,如Asia/Shanghai、America/Los_Angeles等。

    在Java8中,直接使用以下代码即可输出美国洛杉矶的时间:

    总结

    世界上有很多时区,不同的时区的时间不一样,中国使用东八区的时间作为标准时间。美国自东海岸至西海岸横跨西五区至西十区,共六个时区。

    所谓东八区,一般表示成GMT+8,这里的GMT指的是格林威治时间。计算机中经常使用时间戳来表示时间,时间戳指的就是当前时间举例格林威治的1970-01-01 00:00:00的总秒数。

    而Java中的Date类中是不包含时区信息的,在使用System.out.println打印Date的时候,回调用Date.toString方法,该方法会获取系统的默认时区来转换时间。

    在Java8中可以使用ZonedTime、ZonedDate和ZonedDateTime来表示带有时区信息的时间。

    LocalDateTime now = LocalDateTime.now(ZoneId.of(“America/Los_Angeles”)); System.out.println(now);

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 从世界需要统一时间标准出发,讲述为什么引入时区时区的设计,进一步介绍时间的测量;涉及概念包括:世界时、本地时、原子时,time zone/UT/GMT/UTC/TAI等; 顺带介绍数据库时间、UNIX时间

    看完本文,您将了解为什么会有时区、时区为什么这么设计,以及时间是如何测量、统一的。

    只想了解概念的朋友,直接走传送门:时区GMTUTTAIUTCUNIX时间戳UNIX 2038问题

    MySQL中的时区、日期和时间处理,参见《MySQL日期与时间函数(日期/时间格式化、增减、对比、时区等)》

    时区

    为什么需要时区

    世界各地的时间是“不一样”的

    古人的一天,习惯用日升日落来计算,比如太阳最高就是正午(12时):这就是地方时。
    这是千百年来形成的一种习惯和文化。
    而地球自转的原因,不同地区阳光照射的角度不同,因此地方时是不同的。

    地球自转是自西向东的,所以东边比西边先看到太阳。因为上面的地方时特点,同一客观时刻,东边使用的时间也比西边的早。

    所以客观上同一时刻,从不同地区人的意识和表达上,时间是不同的。

    全世界需要一个统一的时间标准

    随着地区、国家的形成、全球化的推进,不同地方时的人之间有更多的交流。但不同的时间表达,给记录、沟通带来了混乱。
    所以世界需要一种统一的时间标准。

    最简单的方式,选一个某一个地区的地方时作为时间标准。但这样一来,当这个地区处于正午时、假定是12点,在地球其他经度上,人们可能正处于早晨、深夜、傍晚。人们的表达可能会变成,“12点了,要吃早饭了”、“12点了、要吃晚饭了”,这严重违背了人们千百年形成的习惯,完全没办法接受。

    所以在兼顾人们习惯的同时,还要有一个可以协调一致的方案,让大家各自表达各自时间的同时,客观上的时间可以对应上。

    时区就是为了解决了这个问题而出现。

    时区的设计

    时区的设计,既要统一世界的时间,也要兼顾各地区习惯、不同地区还要容易换算。

    时区划分规则

    1884年,在华盛顿的国际经度会议规定:将全球按经线从东到西划分为24个时区,其中东、西各12个时区,每个时区跨越经度15°,0区和12区跨越东西各7.5°)。规定相邻区域的时间相差1小时(这样24个时区刚好是24小时,地球自转一周),这代表着在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。

    当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。这样使用起来就很方便。
    但这个方法也有个问题:如果连续跨越24个时区回到原点,那么时间将会多出或少去一天。
    为了避免这种“日期错乱”现象,国际上统一规定180°经线为“国际日期变更线”。当你由西向东跨越国际日期变更线时,必须在你的计时系统中减去一天;反之,由东向西跨越国际日期变更线,就必须加上一天
    在这里插入图片描述
    图片来自香港天文台1
    百度的时区图片,更详细,但有防盗链不能引用。

    上面的标准是指导意义,而各地实际遵照的时区,并不一定严格对照所处经度。因为有很多国家或地区同时跨越多个时区,为了照顾到行政上的方便,常将1个国家或1个省份划在一起时区里。所以时区并不严格按南北直线来划分,而是按自然条件来划分。例如,中国幅员宽广,差不多跨5个时区,但为了使用方便简单,实际上在只用东八时区的标准时即北京时间为准。

    第一个世界时:GMT

    确定时区规则后,会议还规定英国(格林尼治天文台旧址)为零时区。这就诞生了第一个世界时(Universal Time,缩写为UT)格林尼治标准时间(Greenwich Mean Time,缩写为GMT,又称格林尼治平时)
    GMT 12:00就是指格林尼治天文台当地的中午12:00,而GMT+8 12:00,则是指的东八区的北京当地时间的12:00。

    GMT最早只是英国的基准时间。
    格林尼治天文台建于1675年,当时,英国航海事业发展迅速,为了解决在海上测定经度的需要,英国当局决定在伦敦东南郊距市中心约20多千米,泰晤士河畔的皇家格林尼治花园中建立天文台。
    1835年以后,格林尼治天文台在杰出的天文学家埃里的领导下,得到扩充并更新了设备。他首创利用“子午环”测定格林尼治平太阳时。该台成为当时世界上测时手段较先进的天文台。
    19实际上半叶,当时很多国家建立了自己的本初子午线,但随着世界航海事业的发展,各地区同步时间变得很不方便。后来在1884年的的国际精度会议上,决定以通过当时格林尼治天文台埃里中星仪所在的经线,GMT也成为了世界基准时间。
    尽管1884年才确立这个时间系统概念,但实际上1924年开始,格林威治天文台每小时就会向全世界播报时间。此后,GTM由英国伦敦的格林威治皇家天文台计算并维护,并在往后的几十年往欧陆其他国家扩散。

    时间的“长度”和“坐标”

    GMT的时间测量

    在刚开始的几十年,GMT 的测量方法非常简单:观测者随时监控太阳在天空的位置,并且把每天太阳爬升到仰角最高的时候记录下来,这个时间点称呼为“过中天”。一般人对于一天 24 小时的理解,大致上就相等于两次太阳过中天的时间间隔。

    但由于地球是以椭圆轨道绕着太阳,在轨道上的行进速率不一,导致一年之中会有“比较长的一天”与“比较短的一天”,所以格林威治的观测者必须要至少连续观测一年,然后求取 365 个长度不一的“天”,再把他们全部平均后,得到固定的一天长度,之后再细分成时、分、秒等单位。
    因为这些特性,实际上GMT是有秒级误差的。

    后来科学家发现了由于地轴摆动、不同地点测量的世界时会有差别,为此制定了新的标准UT1,之前的GMT称之为UT0;再后来科学家发现由于地球自转率的季节性变动,UT1具有周期性变化,修正上述影响后,得到了更均匀的UT2

    国际原子时

    在1960年以前,GMT尽管有些许不精确,但仍作为基本时间计量系统被广泛应用。
    (中间短暂的被历书时代替)
    1967年第十三届国际计量大会(CGPM)决定,把秒的定义改成原子钟导出的原子时秒。

    铯 -133 原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间

    自此时间测量就与地球自转脱节了。这个只利用原子钟计算时间与日期的系统,称作国际原子时 (International Atomic Time,简称TAI),这是一种只有“天”的系统,时分秒都以“天”的小数点零头来表示。
    国际原子时是一个连续性指标, 由1958年1月1日0時0分0秒起,以日、时、分、秒计算,准确度为每日数纳秒,而UT的准确度为每日数毫秒。在确定原子时起点之后,由于地球自转速度不均匀,UT与原子时之间的时差便逐年积累。

    TAI的起点是这样规定的:
    取1958年1月1日0时0分0秒世界时(UT)的瞬间作为同年同月同日0时0分0秒TAI。(事后发现,在该瞬间原子时与世界时的时刻之差为0.0039秒。这一差值就作为历史事实而保留下来。

    UTC

    尽管获得了更精确的时间测量,但许多应用部门要求时间系统接近世界时。
    既要以国际原子时为计算基准,但时间又要尽量接近UT、让一般人都方便使用,UTC就是为了这个目标而设计。

    诞生

    1972年诞生了一个折衷方案:协调世界时(Universal Time Coordinated,缩写为UTC)1 2UTC是当前的世界标准时间

    协调世界时,即以我为基准,向我看齐的意思。(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
    中国大陆采用ISO 8601的《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408-1994)称之为国际协调时间,代替原来的GB/T 7408-1994;中国台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》,称之为世界统一时间

    为了确保UTC与GMT相差不会超过0.9秒,在有需要的情况下会在UTC内加上正或负闰秒。所以,UTC与GMT基本上等同,误差不超过0.9秒。所以在实际上,UTC与GMT近乎相同。

    • 按国际无线电咨询委员会(CCIR)通过的关于UTC的修正案,从1972年1月1日起UTC与UT1(在UT中加入极移改正得到)之间的差值最大可以达到±0.9s。位于巴黎的国际地球自转事务中央局负责决定何时加入闰秒。一般会在每年的6月30日、12月31日的最后一秒进行调整。
    • UTC与TAI之间会出现若干整数秒的差别,但两者频率保持一致。

    这样UTC按原子时的频率、保持了时间尺度的均匀性,又能近似地反映地球自转的变化。

    由于 UTC直接与国际度量衡标准相联系,所以目前所有的国际通讯系统,像是卫星、航空、GPS 等等,全部都协议采用UTC 时间。

    随着UTC的诞生,之前的各种计时方案使用越来越少。尽管如此,GMT等世界时,在日常生活、天文导航、大地测量和宇宙飞行等方面仍属必需;同时,世界时反映地球自转速率的变化,是地球自转参数之一,仍为天文学和地球物理学的基本资料。

    格式

    国际标准化组织规定了日期和时间的表示方法,ISO 8601规定了日期和时间相关的数据交换时的格式。UTC的标准格式为2019-11-11T00:00:00.000Z,由三个部分组成:

    1. T代表使用UTC时间
    2. Z是UTC偏移量,表示UTC时间与本地时的差别、即时差。
      • Z本身表示0时区,读作Zulu。写作Z或不写的时候,表示不偏移、即GTM/0时区的时间。
      • 需要偏移时,将Z替换为真实的偏移量。偏移量可用以下形式表示: ±[hh]:[mm]±[hh][mm]±[hh]
      • 目前有39个UTC偏移量(当伊朗试行夏令时时只有38个)
      • 偏移量除了数字,也可以写时区名
    3. 时间数值。表示在限定UTC格式和偏移量的情况下,偏移时区的本地时间。

    看一个例子:

    • GMT时间无需偏移,写作2019-11-11T00:00:00.000
    • 北京在东8区、比GMT要早8小时,写作2019-11-11T08:00:00.000+0800

    计算机世界的时间:UNIX TIME

    定义

    Unix时间(Unix Time),也叫做POSIX时间或纪元时间(Epoch Time),是用来记录时间的流逝,所以也常被叫做时间戳3 4
    定义为从1970-01-01T00:00:00开始流逝的秒数,不考虑闰秒。之后的时间是正数,之前的是负数。

    从定义可以看到,它只代表了从Unix纪元开始流逝的秒数,所以你身处地球上何处,这个时间都是一样的。

    一般Unix时间都是精确到秒,但也有些地方Unix时间是精确到毫秒的(比如MySQL 5.6.4之后开始支持到微秒)。

    使用场景

    Unix时间主要用于Unix或类Unix系统,但在文件系统、数据库系统、开发语言等方面也有广泛应用,如C/C++、Java、MySQL等。也存在一些其他操作系统或者编程语言,使用的就是不一样的纪元起始日期了,比如MFC使用的是1899-12-30T00:00:00

    Unix系统中计算机内部的时间都是使用Unix时间的。而给用户看时,就需要转换成日期和时间的这种对人友好的形式。

    在类Unix系统上,可通过命令date +%s查看当前Unix时间:
    1490451854

    几点疑问

    为什么Unix纪元时间是1970-01-01T00:00:00

    这个问题得去问Unix之父:Ken Thompson 和 Dennis Ritchie了,是他们选择这个时间作为Unix系统的纪元时间的4

    第一版的Unix程序员手册是1971年11月份出版的,上面定义Unix时间是“从1971-01-01T00:00:00开始,单位是一秒的六十分之一”。这意味在Unix时间的最早版本中,时间计数器以60Hz的频率(芯片的振荡器频率)递增,每隔1/60秒,计数器就加一。当时使用的整数计数器是32位的,这样Unix时间能够表示的范围就非常受限了,232/60/3600/24/30/12≈2.3年。所以后来经过多次更改,频率变成了1Hz,纪元时间改为了1970-01-01T00:00:00

    有一种说法是Unix操作系统诞生于1970年,但实际上并不是的,在1969年左右,Unix的概念就已经诞生了,Unix的最早版本已经诞生了。Wired网站上的一篇文章写道

    Ritchie说这个时间其实是随意选择的,因为需要一个统一的日期来作为时间的起点,而1970年的元旦,看起来是最方便的。

    时间戳存满了怎么办?

    目前已知操作系统、文件系统、数据库系统、开发语言等,都可能因使用或借鉴了Unix,存在类似问题。

    在32位系统中一般时间戳占用4字节,还有一些系统如MySQL也如此。
    32位、去除符号位,剩余位数最多表示2^31-1=2147483647秒≈24855天≈68年,有人计算过是2038-01-19T03:14:07。到了那个时刻,时间戳字段存满就会溢出;如果在那个时候,目前大多数系统或语言还没有修改时间戳的长度,计算机世界的世界末日就来了!5

    对于操作系统而言,目前我们大部分的系统都已经升级到64位系统,理论上可以一直表达到15:30:08 UTC on Sun, 4 December 292,277,026,596,也就是几千亿年后。可惜太阳系几十亿年后就要毁灭了,人类不一定能见到那个时刻;要是人类幸存下来了,应该有的是办法解决这个问题了。

    是否会发生2038年问题,并不绝对取决于是32位系统还是64位系统。而是由具体系统中对time_t类型的实现决定。NetBSDOpenBSD的早期版本在amd64平台上仍然使用了32位time_t,因此仍然会发生2038年问题。如今也有一些32位系统开始使用64位的time_t类型。64位Linux上已经在使用64位的time_t了,而32位Linux上则似乎仍然是32位。Mac OS也已经不用担心2038问题,亲测1万年以上没问题。
    除了操作系统,开发语言或数据库系统,有些不一定依赖于系统的time_t,是否已解决了2038问题,要看其支持情况。目前Java是没有该问题的,MySQL 8.0timstamp还有该问题。

    要想知道你的电脑不幸到2038年还没坏,会不会遇上末日,可以用下面的方法尝试:

    在GNU/Linux上执行date -ud @2147483648
    在BSD上执行date -u -r 2147483648

    如果系统使用了64位时间,结果应该是Tue Jan 19 03:14:08 UTC 2038,即超出32位时间戳最大值1秒。这样就可以度过末日了。

    UNIX这块,本人对计算机历史、系统原理了解有限,大量参考了http://ju.outofmemory.cn/entry/95734这篇文章。原文还有很多扩展,感兴趣的朋友可以去读一下。


    在这里插入图片描述


    以上。感谢您的阅读。

    本文未尽事项,后续有机会补充

    • 时区名
    • ISO8601的详细解读
    • UNIX时间戳的限制,广泛存在于多种计算机系统中,具体的区别、改造情况有哪些

    1. 香港天文台 - 世界时区图:http://gb.weather.gov.hk/gts/time/clock/clockHc.htm# ↩︎ ↩︎

    2. 百度 - UTC:https://baike.baidu.com/item/%E5%8D%8F%E8%B0%83%E4%B8%96%E7%95%8C%E6%97%B6/787659?fr=aladdin ↩︎

    3. UNIX时间戳 - 百度百科 :https://baike.baidu.com/item/unix%E6%97%B6%E9%97%B4%E6%88%B3/2078227?fr=aladdin ↩︎

    4. UNIX时间 - 维基百科:https://en.wikipedia.org/wiki/Unix_time ↩︎ ↩︎

    5. UNIX时间2038问题:https://en.wikipedia.org/wiki/Year_2038_problem ↩︎

    展开全文
  • 系统时间为Linux内核时间,硬件时间一般BOIS的RTC时间。Linux内核在启动时,会尝试读取BIOS的RTC时间,并以此基准设置系统时间。内核启动之后,系统时间和硬件即两个独立的时间,各自运行。 嵌入式Linux...

    Linux系统时间分为两种:系统时间和硬件时间。系统时间为Linux内核时间,硬件时间一般为BOIS中的RTC时间。Linux内核在启动时,会尝试读取BIOS中的RTC时间,并以此为基准设置系统时间。内核启动之后,系统时间和硬件即为两个独立的时间,各自运行。

    嵌入式Linux系统开发时,同样需要提供硬件来为系统提供时间基准,这个硬件一般就是RTC芯片,比如,rx8010。Linux关于时间的配置包括:系统时间设置、硬件时间设置、时区设置。

    时区配置

    tzselect命令用于设置系统的当前时区。在桌面系统上,比如,ubuntu或者Debian系统,系统支持完整的时区配置,可以使用tzselect按照命令提示一步一步进行配置,比如,设置Asia/China/Beijing时区

    执行tzselect命令 --> 选择Asia --> 选择China -->选择Beijing Time-->Yes保存设置
    

    最终,系统会将TZ=‘Asia/Shanghai’; export TZ配置到~/.profile文件。

    嵌入式Linux系统,一般不会提供tzselect命令,那么时区的配置可以通过直接配置TZ环境变量设置系统时区的。同时,需要在/usr/share/zoneinfo目录下提供时区相关的配置文件,这里只配置了Asia的时区。

    配置TZ环境变量
    
    $ cat /etc/profile
    TZ='Asia/Shanghai'; export TZ
    
    /usr/shared/zoneinfo目录下必须包含时区信息
    
    # /usr/share/zoneinfo$ ls
    Asia  PRC
    

    通过date命令可以查到当前的时区信息:

    Tue Jul  7 10:00:02 CST 2020 #CST表示东八区
    

    系统时间配置

    系统的时间配置方式分为:手动配置和NTP同步,手动配置一般通过date命令直接设置系统时间,NTP方式通过NTP服务器配置本地的系统时间。

    为了时间的精确性,建议使用NTP方式配置系统时间。

    ntpdate 0.cn.pool.ntp.org
    

    如果对于时间精确性要求不高,可以使用date命令直接设置系统时间,date支持的时间配置格式十分的灵活,下面举几个简单的例子,如果有兴趣可以通过man date查看更多的用法。

    1、将日期设置为2020076[root@linux-node ~]# date -s 07/06/20
    
    2、将时间设置为100700[root@linux-node ~]# date -s 10:07:00
    
    3、将时间设置为2020070610:08
    [root@linux-node ~]#  date -s "2020-07-07 10:08:00"
    

    硬件时间配置

    hwclock命令用于管理硬件时间,可以通过该命令完成硬件时间的设置,系统时间和硬件时间之后的转换等。

    查看硬件时间
    
    hwclock -r #查看当前硬件时间
    Tue Jul  7 02:10:10 2020  0.000000 seconds
    
    同步系统时间和硬件时间
    
    hwclock -w -u 
    

    注意:
    -w表示将系统时间同步到硬件时间,-u表示硬件时间以UTC时间为准。
    系统启动时,会通过硬件同步系统时间,系统认为从硬件取到的UTC时间,之后再按照
    本地时区,将UTC时间转换为本地时间,所以,为了使系统设置正确的时区时间,这里
    必须加上 -u选项。

    同步系统时间和硬件时间
    
    hwclock -s -u
    

    -s表示将硬件时间同步到系统时间,-u表示硬件时间为UTC时间,如果硬件时间以UTC时间保存,那
    必须使用-u选项。

    展开全文
  • 因此,时区为-2小时。如何获取带有时区的当前日期/时间。Date curr_date = new Date(System.currentTimeMillis());例如Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));与J...
  • Java时间时区__java

    千次阅读 2019-01-11 14:21:53
    前言: 时间格式: //世界标准时间,其中T表示时分秒的开始(或者日期与时间的间隔),Z表示这是一个世界标准时间 2017-12-13T01:47:07.081Z //本地时间,也叫不含时区信息的时间时间格式: //世界标准时间,...
  • Java时间时区

    万次阅读 2017-12-14 11:08:58
    0. 前言:时间格式://世界标准时间,其中T表示时分秒的开始(或者日期与...2017-12-13T09:47:07.153//含有时区信息的时间,+08:00表示时间是由世界标准时间加了8个小时得到的,[Asia/Shanghai]表示时区 2017-12-13
  • LocalDateTimeLocalDateTime本身不包含时区信息,它存储的...对北京和东京的人来看这个时间,都认为是本地时间的话,在真实时间上,因为时区的差异,其实是相差1个小时的时间的。构造函数既然不带时区,那么考虑Loca...
  • 我上一篇关于时间的博客在这: https://blog.csdn.net/ql562482472/article/details/81328647 过去了快一年,我发现其实时区这个问题,还挺有意思的。 事情源于前一阵,springboot的mybatis插件更新到了2.x版本,...
  • 1、将mysql安装文件写的bin目录的路径,添加到电脑的系统变量path路径下 2、在windows的cmd窗口下,首先启动服务, ... 然后,输入如下命令 mysql -hlocalhost -uroot -proot ...3、时区本地化 > set global...
  • 使用Java8时区格式LocalDateTime

    千次阅读 2021-03-11 12:30:06
    使用Java8时区格式LocalDateTime我有这个简单的代码:DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z"); LocalDateTime.now().format(FORMATTER)然后我会得到以下例外...
  • Java时区转换及时间格式

    千次阅读 2021-01-13 16:17:30
    本文介绍Java API Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。问题描述:向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,...
  • ubuntu修改时区同步时间

    千次阅读 2022-01-28 14:24:08
    查看当前时区 root@co:~# timedatectl status Local time: Fri 2022-01-28 06:23:13 UTC Universal time: Fri 2022-01-28 06:23:13 UTC RTC time: Fri 2022-01-28 06:23:13 Time zone: Etc
  • 0、引言Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java时区,对使用Druid很用帮助.1、UTC时间&GMT时间UTC时间时间标准时间(Universal Time Coordinated),UTC是根据原子钟来计算...
  • 目录datetime模块date 类time 类datetime 类strftime 方法strptime 方法replace 方法...datetime模块提供用于处理日期和时间的类。支持日期时间数学运算,更着重于有效地解析其属性用于格式化输出和数据操作。...
  • 时间转换时间戳: /* * 将时间转换时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat...
  • 时区转换,时间格式转换

    千次阅读 2019-07-05 00:29:29
    GMT - 格林尼治标准时间/格林威治平均时间 UTC - 协调世界时 LT - 本地时间 这篇文章解释的都很详细 一些时间的概念与区分(UTC、GMT、LT、TAI等) 我们一般认为GMT和UTC是一样的,都与英国伦敦的本地时相同。 UTC...
  • Java时区时间转换

    2020-09-27 17:16:28
    开发,我们可能需要将时区类的时间转换成我们能够理解的且表示正常的date类型(这些场景在数据库时间字段比较常见,如mongo和es,他们储存的时候时间是0时区表示),实例如下: String time = "2020-09-27T03:57:30.003Z...
  • CST时区问题

    千次阅读 2021-05-17 17:45:53
    转自:blog.chinaunix.net...很多unix下中国时区都是用CST表示的。但是这个表示方法非常不合理。因为CST同时代表了下面4个时区。CST Central Standard Time (USA) UT-6:00CST Central Standard Time (Australia) UT+...
  • lua时区时间

    万次阅读 2017-04-05 19:14:16
    lua时间库 一、时间的三种格式 ...这里的 1131286477 是一个以秒单位的 格林威志时间(gmt),注意不同时区的时差 关于时间戳: 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日
  • 计算机日期、时间表示方法 UNIX认为1970年1月1日0点是时间纪元,现在的计算机世界沿用此规则。 示例: var d = new Date(0); // 0是距UTC时间1970年1月1日0点的毫秒数 console.log(d.toLocaleString()); // 显示...
  • Linux 下修改时间时区

    千次阅读 2021-11-09 11:39:45
    2、查看时区 +800 表示东八区 date -R 3、修改系统时间 sudo date -s "20211109 11:32" 二、修改时区 1、读取时间 timedatectl //等同于 timedatectl status 2、设置时间 timedatectl set-time "YYYY-MM-DD HH...
  • linux时间时区修改(附suse)

    千次阅读 2021-05-15 02:44:45
    1、查看系统时间[root@test3 ~]# dateThu Dec 20 23:25:33 CST 2012[root@test3 ~]# date +"%Y%m%d %H:%m:%S"20121220 23:12:542、查看硬件时间系统时钟是指当前Linux Kernel的时钟,而硬件时钟则是主板上由电池...
  • 来源 UTC 和 GMT 及 北京时间的关系 ...在UTC,每一年或两年会有一个“闰秒”,而我们一般不理 会这个“闰秒”,但是在Java,这造成我们有时会出现60秒或61秒。 GMT=UTC UTC+8=北京时间 ...
  • golang 时间日期 时区 格式 简介

    千次阅读 2020-10-27 09:25:49
    开发,我们对时间的使用是比较多的,其应用场景,按照使用概率,从大到小,通常是: 获取当前或数据库存储的时间 比较两个时间点的先后 显示打印时间 时区转换 对应到go,也就是几个基本定义: 时间点与...
  • Linux Shell脚本_设置时区并同步时间

    千次阅读 2020-04-08 10:04:34
    以下命令表示的是让当前服务器时间同步到ntp1.aliyun.com [root@localhost ~]# ntpdate ntp1.aliyun.com #Linux硬件时间同步:修改服务器硬件时间映射到我们的系统时间,也可以说系统时间同步到硬件时间,防止系统...
  • Linux系统的时区时间设置

    千次阅读 2017-02-27 14:42:38
    时区时间的概念 CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。 UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间“Universal Time/Temps Cordonné”...
  • 往常小编遇到的带时区时间格式都是这样的 release_time = 'Wed Nov 14 15:38:55 +0800 2018' 这种的时间怎么格式化我们想要的呢? 首先我们要学习点基础的知识关于 datatime库的 %y 两位数的年份表示(00-99)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,283
精华内容 36,113
关键字:

中时区时间表示为什么