Skip to content

基础概念

一、时刻

表示某一个时间点,一般使用 时间戳(比如1686418183) 或者 时间字符串(比如2023-06-11 01:29:43)+时区(比如Asia/Shanghai)来表示。

在各个编程语言中,使用时间对象来表示。

1、时间戳

说明:unix时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(int64),时间戳可以精确地表示某一时刻。全世界的时间戳都是一样的,并且与时区无关

编程语言获取时间戳:

编程语言指令
JavaSystem.currentTimeMillis() / 1000
PHPtime()
Golangtime.now().Unix()
JavaScriptMath.round(new Date().getTime()/1000)
MySQLSELECT unix_timestamp(now())

2、时间字符串

人们常用的时间格式:"2020-2-7 02:58:00","2020-2-7", "02:58:00"

时间戳是给电脑程序用的,时间字符串才是给人看的😁

3、时间对象

不同编程语言读取数据库时间后包装类型

编程语言时间对象
Javajava.util.Date对象,由时间戳构造
PHP时间字符串 或者 DateTime对象
Golangtime.Time对象,由时间戳和Localtion时区构造
JavaScriptDate对象

数据库时间(常用datetime和timestamp)

  • datetime 日期时间,8字节,格式: yyyy-MM-dd HH:mm:ss,存储范围:'1000-01-01 00:00:00' to '9999-12-31 23:59:59'
  • timestamp 时间戳,4字节,存储范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC

日历

将时间戳转换成年月日时分秒的时间字符串,就需要日历。

二、时区

地球是圆的,全世界的时间戳是一致的,但是时间字符串不一致(比如北京8点的时候日本东京是9点)。这就需要划分不同的时区来区分。

全球共分为24个时区,东西各12个时区。每个时区差1小时。

1、时区表示方法

  • 时区名称:一般用"Asia/Shanghai","America/New_York"的方式(洲/城市名)来表示,这是IANA的标准,各个编程语言都会遵循该标准。
  • UTC偏移量:utc_offset,是和0时区(也就是UTC:世界协调时)的偏差值,一般用分钟来表示,比如东八区是+480分钟,西三区是-180分钟。
  • 地理位置:根据位置可以知道对应的时区,在滴滴用cityId来表示。

2、夏令时

夏令时,(Daylight Saving Time:DST),是一种为节约能源而人为调整时间的制度,一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,从而节约照明用电。

一般是在夏天将时间调快1小时,在冬天再将时间调回来。 现在还有很多国家使用夏令时,比如美国、智利。中国也实行过一段时间夏令时,但在1991年后取消了。

这个夏令时切换规则是可以人为调整的,比如巴西在巴西在2019年取消夏令时,埃及在2023年恢复夏令时,智利在2022年夏令时切换时间推迟一周。

夏令时的切换会给程序带来不小的麻烦,如果夏令时规则更新不及时,会让时间错1小时。

时间长度 duration

时间经过的长度,比如30min,5s

时间段(时间范围) interval

比如 8点~11点,10.1日~10.7日

时间三要素

  • 时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数
  • 时间字符串:人们看得懂的时间格式,比如"2020-02-07 02:58:00"
  • 时区:用cityId、时区名、utc_offset其中之一即可表示。

精准表示一个时间点,需要使用时间戳 或者 时间字符串+时区来表示。

时间戳是给计算机使用的,时间字符串是给人看的。

有三要素的其中两个,便可以推出另外一个要素。