世界时间以什么为标准(世界的时间是以哪个国家为标准)

前言

我们在开发时,除了数字、数学这样的常用API之外,还有日期时间类,更是会被经常使用。

比如我们项目中必备的日志功能,需要记录异常等信息产生的时间。还有数据库中的表,也经常需要带有日期时间字段,用于记录本条数据产生和更新的时间。另外当我们需要对某段代码进行调优时,也往往需要知道本段代码的执行时间是多长。诸如此类,项目中有很多地方都需要用到日期和时间,所以今天必须带各位来学习一下相关的API有哪些。


全文大约 【5400】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考…

一. 概念简介

在开始学习今天的知识之前,先给大家讲解一下与今天内容相关的一些概念,否则可能会让一些同学产生迷惑

1. 日期和时间的区别

首先我们得搞清楚,日期和时间的概念并不一样。日期是指某一天,它不是连续变化的,可以说是离散的。

而时间有两种概念,一种是不带日期的时间,如10:30:01;另一种是带日期的时间,如2023-01-01 15:11:40。只有带日期的时间,才能唯一确定某个时刻,而不带日期的时间是无法确定一个唯一时刻的。

2. 本地时间

本地时间其实就是每个地方,当前所在国家所采用的标准时间。

比如我们国家就是采用的北京时间,只要是在中国大陆,我们说晚上8:00见,这个8:00指的就是北京时间。即使我们国家的时区,其实包括了从东五区到东九区共5个时区,但我们全国都是统一采用的东八区的区时,这样各地区人员之间的交流才不会产生歧义。但如果是在别的国家,那这个本地时间,就是他们国家的标准区时了,所以每个国家的标准区时可能是不同的。

3. 时区表示法

我们初中学地理的时候,就学过时区的概念,在这里就不多讲了。在计算机中,如果我们想准确地确定一个时间,需要把本地时间和时区结合在一起才行。 其中时区有如下几种表示方式:

1. GMT或UTC加时区偏移表示法:如GMT+08:00 或 UTC+08:00,就表示东八区的时间。因为北京时区是东八区,领先UTC 8个小时,所以将UTC转换成北京时间时,要加上8小时。

GMT(Greenwich Mean Time)是格林威治标准时间,UTC(Universal Time Coordinated)是世界统一时间或世界标准时间,GMT和UTC其实基本是等价的,它们都是英国伦敦的本地时间。但UTC使用了更精确的原子钟计时,每隔几年会有一个闰秒,不过我们在开发时可以忽略两者的误差,因为计算机的时钟在联网时会自动与时间服务器同步时间。

2. 时区缩写表示法:如CST是China Standard Time的缩写,即中国标准时间。但CST也是美国中部时间Central Standard Time USA的缩写,因此有些缩写容易产生混淆,开发时尽量不要使用缩写形式。

3. 洲/城市表示法:如Asia/Shanghai,表示上海所在地的时区。我们要特别注意,城市名称并不是任意的城市,而是由国际标准组织规定的城市。

4. 本地化

本地化并不只包括时间这一种信息,还包括一个国家或地区所采用的日期、时间、数字、货币等各种信息的格式,开发时通常使用Locale进行表示。Locale由“语言_国家”的字母缩写构成,如“zh_CN”就表示“中文+中国”,“en_US”表示“英文+美国”。其中语言是小写,国家是大写。

而对于不同国家或地区的Locale日期部分来说,如中国和美国的本地时间表示方式如下:

● zh_CN:2023-01-24

● en_US:01/24/2023

5. 夏令时

夏令时(Daylight Saving Time:DST),也叫夏时制,又称“日光节约时制”,是一种为了节约能源而人为规定地方时间的制度。 一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

我们国家曾经实行过一段时间夏令时,但在1992年就废除了,不过美国人到现在还在使用。所以涉及到跨国应用开发时,相关时间的换算可能会有点复杂。因为涉及到夏令时,相同的时区,如果表示的方式不同,转换出的时间也是不同的。

6. Epoch Time时间起点

Epoch Time是一个固定的通用时间,即世界标准时间(UTC) 1970-01-01 00:00:00 UTC,它是计算机里时间开始的起点,该起点被记为0,而1970年以前的时间被认为是负数。

我们知道,现实世界的时间谁也不知道是从什么时候开始的,但是计算机发明的时间并不长,为了方便大家进行各种开发和计算,于是国际标准委员会就给计算机设置了一个时间的起点。以这个时间为起点,每过去一秒,该数值就加1,这样我们就可以算出对应的公历时间日期(不包括闰秒)。Epoch Time在不同的编程语言中,会有几种不同的存储方式:

● 以秒为单位的整数:1574208900,缺点是精度只能到秒;

● 以毫秒为单位的整数:1574208900123,最后3位表示毫秒数;

● 以秒为单位的浮点数:1574208900.123,小数点后表示零点几秒。

7. 时间戳

时间戳(timestamp),也称为Unix时间 或 POSIX时间,它是一种时间表示方式。

表示从1970年1月1日0时0分0秒(格林尼治时间)开始,一直到现在所经过的秒数或毫秒数。在Java一般是用long类型来存储该值,但在别的编程语言中有可能是使用float类型。比如1574208900就表示从1970年1月1日零点开始,到2019年11月20日8点15分截止,一共经历了1574208900秒,所以换算成北京时间就是:1574208900 = 北京时间2019-11-20 8:15:00。如果我们要获取当前的时间戳,在Java中可以使用System.currentTimeMillis()方法。

从本质上来说,时间戳就是个时间差值,其值与时区无关。比如在UTC标准下,时间起点的时间戳就是timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00,此时对应的北京时间是timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00

了解了以上这些基本概念之后,我们就可以继续往下学习今天其他的内容了。

二. Date日期时间类

1. 简介

如果我们想在Java中获取当前的时间,可以使用 java.util.Date类和 java.util.Calendar类来实现。其中,Date类封装了系统的日期和时间信息,Calendar类则会根据系统的日历来填充Date对象。

java.util.Date是一个表示日期和时间的类,代表了系统特定的时间戳。它是按照UTC时间显示的,可以精确到毫秒,源码内部使用long类型进行时间的存储。我们要注意与java.sql.Date区分,后者是用在数据库中的类,且是按照本地时区显示的。Date对象表示的时间,其默认顺序是星期、月、日、小时、分、秒、年。

2. 构造方法

java.util.Date类给我们提供了多个构造方法,如下图所示:

世界时间以什么为标准(世界的时间是以哪个国家为标准)

但是一般在开发时,我们常用的也没有这么多,一般使用时如下形式:

● Date():创建Date对象并初始化,该对象可以获取本地的当前时间,该时间会精确到毫秒。

● Date(long date):构造一个Date对象,并接受一个从1970年1月1日起的毫秒数作为参数。

3. 常用API方法

当我们构造出来一个Date对象之后,就可以使用它的一些API方法进行时间的操作了,这些常用的API方法如下:

世界时间以什么为标准(世界的时间是以哪个国家为标准)

4. 使用方法

4.1 基本使用

接下来我们先通过一个简单的案例,来演示一下Date的基本用法。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

如果我们想获取当前时间的时间戳,可以使用System.currentTimeMillis()方法。构造出Date对象之后,我们可以直接打印该对象,就能展示出当前时间,但是这个格式并不一定符合我们中国人的阅读习惯,后面我们可以对日期进行格式化操作。

4.2 其他用法

除了上面这些基本用法之外,Date还有其他的一些用法。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

另外我们还要注意,getYear()方法返回的年份必须加上1900;getMonth()方法返回的月份是0-11,分别表示1-12月,所以要加1;而getDate()方法返回的日期范围是1~31,就不能加1。

在打印本地时区表示的日期和时间时,不同的计算机可能会有不同的展示结果,后面我们可以使用SimpleDateFormat设置出我们想要的日期时间格式。

4.3 统计时间差

有时候我们要统计某个功能的执行时间,此时就可以用该功能结束时的时间,减去开始时的时间,得到一个时间差,这就是该功能的执行时间。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

三. Calendar日历类

1. 简介

Calendar类是Java时间类Date的扩展。

相比Date,它拥有更强大的功能,主要是多了可以做简单日期和时间运算的功能,且在实现方式上也比Date类更复杂一些。Calendar可以用来计算日期,比如说计算下个月的日期,或者两个月前的日期等。

Calendar类是一个抽象类,我们在实际使用时需要实现特定的子类,一般使用getInstance()方法创建即可。Calendar类有几个主要的子类,包括java.util.GregorianCalendar和java.util.TimeZone。其中GregorianCalendar类提供了标准的日历系统,可以用来计算未来或过去某天的日期。TimeZone类则可以用来在不同的时区之间,转换日期和时间。

2. Calendar常量字段

Calendar中有以下几个常用的常量字段,用于表示不同的意义。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

3. Calendar常用方法

除了以上常用的常量字段之外,Calendar还有一些常用的方法,如下表所示:

世界时间以什么为标准(世界的时间是以哪个国家为标准)

Calendar对象可以调用set()方法将日历翻到任何一个时间,当参数 year取负数时表示是公元前。调用 get()方法可以获取年、月、日等时间信息,field参数的值是前面讲过的Calendar静态常量。

4. 构建Calendar对象

Calendar类是抽象类,所以我们不能通过new的方式来构建Calendar对象。在实际使用时,我们一般是要实现特定的子类,经常是使用getInstance()方法进行创建。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

5. 获取当前时间

获取到Calendar对象之后,我们可以获取到当前日期对象的年月日时分秒等信息。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

我们要注意,Calendar是通过get()方法获取年月日等信息的,其中返回的年份不必转换,返回的月份仍要加1,返回的星期要特别注意,1~7分别表示周日、周一、……周六。

6. 设置时间

我们通过Calendar.getInstance()方法获取到Calendar对象后,获取到的其实就是当前时间。如果我们想设置某个特定的日期和时间,需要先用clear()方法清除掉之前所有的字段。

世界时间以什么为标准(世界的时间是以哪个国家为标准)

我们可以利用Calendar.getTime()方法,将一个Calendar对象转换成Date对象,后面我们就可以用SimpleDateFormat进行格式化操作了。

四. GregorianCalendar类

1. 简介

Java中除了有Calendar类实现了公历日历,还有一个子类GregorianCalendar。在GregorianCalendar类中,定义了两个字段:AD和BC,分别代表公历定义的两个时代。GregorianCalendar中的属性和方法与Calendar类似,壹哥就不再赘述了,接下来我们直接通过一个案例来进行展示其用法。

2. 基本用法

这里我们设计一个案例,来判断当前年份是闰年还是平年。

世界时间以什么为标准(世界的时间是以哪个国家为标准)


五. 结语

至此我们就把Date和扩展类Calendar给大家讲解完毕,今天的内容其实并不难,大家需要把一些常用的构造方式及方法、常量记一下即可。


更多程序员/IT编程、技术类内容,关注@千锋教育

本文部分内容来自互联网,如有疑问请与我们联系。

发布者:币侠财经,转转请注明出处:https://www.yfhhf.com/baike/228453.html

(0)
                       
上一篇 2023年 5月 28日 上午4:52
下一篇 2023年 5月 28日 上午5:46

相关推荐

  • 护肤品前十名(护肤品前十名排行榜有哪些)

    前段时间有很多朋友都想知道护肤品前十名是什么。今天小编特意为大家整理了相关知识来解答!还有其他网友想搞清楚护肤品前十名排行榜有哪些,币侠网小编(www.yfhhf.com)现在为大家找到了相关问题的答案,接下来一起看看吧,希望能给大家带来帮助。 今年断断续续买了一大堆,有已经开始回购的,也有用完就忘了买过的…还有现在还收在柜子里没开瓶的&#823…

    2022年 9月 18日
    2480
  • 世界第一城市(东京是不是世界第一大城市)

    说到世界上的一线城市,人们脑海中首先会想到的就是美国的纽约。 但世界上并不是只有纽约这样一个一线城市,它们的实力甚至在某些方面完胜纽约。 在2022年世界一线城市排行榜中,排名前十的到底有哪些国家的城市呢?它们到底又是如何发展成今天的这个样子的呢? 我们到底又是如何去定义的这个“一线城市”,中国到底又有多少个城市登上了这份名单呢?让我们来一起看看吧! 01 …

    2022年 11月 3日
    3070
  • 十大适合孕妇的小生意(孕妇开张生意好不好)

    怀孕了的女人多半要暂停自己的工作,待在家里养胎,失去金钱来源,因而会感到焦虑和没有安全感。但是如果这时候我们能够做些小生意可能就会快乐很多,那孕期做点什么小生意?接下来我们就来给大家讲解一下这方面的内容。 1、开网店 可以开个网店,卖点东西,至于卖东西的种类就需要自己调查市场后再作决定,网上开店,不需要随时坐在电脑前,只要有客户咨询时再上网,不用担心电脑的辐…

    2023年 1月 19日
    4850
  • 美国油价多少钱一升(现在美国油价多少钱一升)

    前段时间有很多朋友都想知道美国油价多少钱一升是什么。今天小编特意为大家整理了相关知识来解答!还有其他网友想搞清楚现在美国油价多少钱一升,币侠网小编(www.yfhhf.com)现在为大家找到了相关问题的答案,接下来一起看看吧,希望能给大家带来帮助。 经过第16次油价调整,实现了近4年以来的最长连跌记录——“五连跌”,累计超过1元/升。不过受到国际油价上涨影响…

    2022年 10月 24日
    2970
  • e5处理器和i5哪个好(e5处理器好还是i5处理器好)

    这两年想装个主机蛮不容易,显卡涨价、内存涨价、硬盘也涨价,搞得装机成本节节攀升。对于手头钱紧,需求也不是特别高的用户来说蛮不友好的。看看电商页面,一块1050ti也得1599元才能买下来。 无聊闲逛电商平台的时候,我们无意中发现了一种超便宜的整机,2000元就能买下号称i9级性能的体验,抱着试一试的心态,就下单了。 整机外观 板U 铭影1050显卡 自带散热…

    2022年 8月 29日
    1.9K0

联系我们

不接风险内容

在线咨询: QQ交谈

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信