時(shí)區(qū)問題 - Python 為例

同事在開發(fā)過程中遇到了時(shí)區(qū)問題,經(jīng)過同事們的努力問題最終解決了口注。這讓我發(fā)現(xiàn)時(shí)區(qū)接口比我想像的要復(fù)雜一些。

首先君珠,時(shí)間如果是一個(gè)物理概念寝志,那么它跟空間是無關(guān)的。例如經(jīng)典的 POSIX 時(shí)間戳葛躏,以 Epoch 為起點(diǎn)記錄時(shí)間差澈段。Epoch 是一個(gè)物理時(shí)間,全球都代表同一個(gè)意思舰攒,那么這種計(jì)時(shí)方法就是跟空間無關(guān)的败富。

然而因?yàn)榈厍蚴莻€(gè)球形,全球?qū)Α?4 點(diǎn)」這類感受是不一致的摩窃。在美國(guó)的 14 點(diǎn)代表的物理時(shí)間兽叮,地球上其他地方可能是晚上,要求這些地方用 14 點(diǎn)表示一個(gè)晚上的時(shí)間猾愿,他們必然不會(huì)舒服鹦聪。這就是劃分時(shí)區(qū)的意義。

當(dāng)我說 2009 年 12 月 23 日 12 點(diǎn)的時(shí)候蒂秘,這個(gè)表述嚴(yán)格來說不能完全表示一個(gè)物理時(shí)間泽本。日本的 2009 年 12 月 23 日 12 點(diǎn)和中國(guó)的 2009 年 12 月 23 日 12 點(diǎn)是不一樣的物理時(shí)間。所以我應(yīng)該說「 2009 年 12 月 23 日 12 點(diǎn)姻僧,UTC+8」后面的 UTC+8 表示這個(gè)時(shí)間比 UTC 時(shí)間多 8 個(gè)小時(shí)规丽,也就是說是中國(guó)時(shí)間蒲牧。

「 2009 年 12 月 23 日 12 點(diǎn),UTC+8」和 「 2009 年 12 月 23 日 4 點(diǎn)赌莺,UTC」是同一個(gè)時(shí)間嗎冰抢?從時(shí)區(qū)時(shí)間來看考榨,是不一樣的贞铣;從物理時(shí)間來看蜈块,是一樣的摩骨。

但是如果我們一直生活在同一個(gè)時(shí)區(qū)戚丸,這也是我們大多數(shù)人的體驗(yàn)疗疟,表示時(shí)間的描述里對(duì)時(shí)區(qū)的描述就顯得很多余梦抢,這時(shí)我們習(xí)慣于省略時(shí)區(qū)的表述额嘿。

Python 的 datetime 文檔 表示港谊,datetime 類別骇吭,有兩種實(shí)例,一種是「aware」的歧寺,一種是「naive」的燥狰。即前一種包含了時(shí)區(qū)信息,后一種省略了時(shí)區(qū)信息斜筐。舉例幾個(gè)接口:

  • datetime.now(tz=None)

    獲取當(dāng)?shù)貢r(shí)間龙致,當(dāng) tzNone 返回的是 naive 的,否則是 aware 的顷链。

  • datetime.utctime()

    把當(dāng)?shù)貢r(shí)間轉(zhuǎn)換成 UTC 時(shí)區(qū)的時(shí)間目代,但是得到的 datetime 是 naive 的。

  • datetime.timestamp(self)

    計(jì)算當(dāng)前時(shí)間(如果是 naive 的嗤练,看作是當(dāng)?shù)貢r(shí)間)的 Unix 時(shí)間戳榛了。得到一個(gè)距離 Epoch 的時(shí)間長(zhǎng)度的浮點(diǎn)數(shù)描述。

從上面的描述可以看出煞抬,datetime.utcnow().timestamp() 得到的是一個(gè)奇怪的值霜大,幾乎沒有任何意義。

Python 的文檔也建議革答,如果要取 UTC 時(shí)間战坤,應(yīng)該使用 datetime.now(timezone.utc),這樣就可以得到 aware 的 UTC 時(shí)間残拐。它的 timestamp() 方法途茫,就可以得出正確的 Unix 時(shí)間戳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溪食,一起剝皮案震驚了整個(gè)濱河市囊卜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖栅组,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袱衷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笑窜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門登疗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來排截,“玉大人,你說我怎么就攤上這事辐益《习粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵智政,是天一觀的道長(zhǎng)认罩。 經(jīng)常有香客問我,道長(zhǎng)续捂,這世上最難降的妖魔是什么垦垂? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮牙瓢,結(jié)果婚禮上劫拗,老公的妹妹穿的比我還像新娘。我一直安慰自己矾克,他們只是感情好页慷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胁附,像睡著了一般酒繁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上控妻,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天州袒,我揣著相機(jī)與錄音,去河邊找鬼饼暑。 笑死稳析,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弓叛。 我是一名探鬼主播彰居,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼撰筷!你這毒婦竟也來了陈惰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤毕籽,失蹤者是張志新(化名)和其女友劉穎抬闯,沒想到半個(gè)月后井辆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溶握,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年杯缺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡榆。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萍肆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胀屿,到底是詐尸還是另有隱情塘揣,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布宿崭,位于F島的核電站亲铡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葡兑。R本人自食惡果不足惜奖蔓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铁孵。 院中可真熱鬧锭硼,春花似錦、人聲如沸蜕劝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岖沛。三九已至暑始,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婴削,已是汗流浹背廊镜。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唉俗,地道東北人嗤朴。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像虫溜,于是被迫代替她去往敵國(guó)和親雹姊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容