1. 程式人生 > >計算機中的時間處理

計算機中的時間處理

目錄

計算機中的時間處理

統一概念

首先先理解一些通用的概念。

標準時間

  • UTC(Universal Time Coordinated),即協調世界時。全世界統一的世界標準時間。需要不規則地加入閏秒。
  • GMT(Greenwich Mean Tim),格林尼治平均時間。
    • 一般認為UTC和GMT是相等的,但是會存在0.9秒以內的誤差,這是由於地球不規則自轉引起的。

時區

  • 本地時間,UTC+時區。東為正西為負。比如北京時間在東八區就是 UTC+(+0800)。
  • DST,夏令時。是指夏天太陽升起比較早,將時鐘撥快一個小時來提早日光的使用。歐美主要國家都引用了這個做法。如果在夏令時時區內 DST=UTC+時區+1。

時間戳

  • Unix時間(戳),表示當前時間到1970年1月1日00:00:00 UTC對應的秒數
  • 時間戳,示當前時間到1970年1月1日00:00:00 UTC對應的毫秒數

字串表示

為了讓時間易於閱讀又出現了用各種字串來表示時間的方法。

RFC2822

YYYY/MM/DD HH:MM:SS ± timezone(時區用4位數字表示)
// eg 1992/02/12 12:23:22+0800

ISO 8601

YYYY-MM-DDThh:mm:ss ± timezone(時區用HH:MM表示)

1997-07-16T08:20:30Z
// “Z”表示UTC標準時區,即"00:00",所以這裡表示零時區的`1997年7月16日08時20分30秒`

//轉換成位於東八區的北京時間則為`1997年7月17日16時20分30秒`
1997-07-16T19:20:30+01:00

// 表示東一區的1997年7月16日19時20秒30分,轉換成UTC標準時間的話是1997-07-16T18:20:30Z

Python中的時間處理 - Arrow

因為原生庫對於時間的處理過於複雜,這裡用了arrow。

快速上手

>>> import arrow 

# 獲得標準時
>>> utc = arrow.utcnow()
>>> utc 
<Arrow [2018-11-13T13:34:28.469607+00:00]>

# 時區轉換
>>> local = utc.to("Asia/Shanghai")
<Arrow [2018-11-13T21:36:41.001464+08:00]>

# 比較
>>> utc > utc.shift(hour=-1)
True

# 字串轉換
>>> arrow.get('2013-05-11T21:23:58.970460+00:00')
<Arrow [2013-05-11T21:23:58.970460+00:00]>

# 格式化輸出
>>> local.format('YYYY-MM-DD HH:mm:ss ZZ')
'2018-11-13 21:36:41 +08:00'

# 可讀性
>>> local.humanize()
'an hour ago'
>>> local.humanize(locale='zh')
'1小時前'

# 時間戳
>>> utc.timestamp
1542116201

JavaScript

JavaScript 時間與日期處理實戰

參考

Arrow文件