我們測量時間的方式其實有點亂。 一分鐘有 60 秒,一小時有 60 分鐘。 這來自古巴比倫,他們以 60 作為數字系統的基礎。 一天有 24 小時,一週有 7 天,那一個月有幾天呢? 一個月有幾天,不只取決於是哪一個月,也取決於你住的國家使用哪一種曆法。
那如果我們改用秒來表示時間間隔呢? 這樣一來,我們就能用公制前綴,把大量的秒數寫成更容易理解的數量。
如果我們哪天真在火星或其他星球上殖民,測量時間只會變得更麻煩。 如果有人說「一年」,指的是地球上的一年,還是火星上的一年?
這個練習的靈感來自 Vernor Vinge 的科幻小說 A Deepness in the Sky,作者在書中以公制作為時間測量的基礎。
你的任務是判斷某個日期過了一個十億秒之後的日期和時間。
一個十億秒等於一千個百萬秒,也就是 1 後面加上九個零。
如果你出生於_2015 年 1 月 24 日 22:00(晚上 10:00:00)_,那麼你在_2046 年 10 月 2 日 23:46:40(晚上 11:46:40)_就滿一個十億秒了。
bash沒有任何內建的方式可以解析日期時間字串。
這個練習需要你呼叫外部工具。
date指令的-d選項可以解析各式各樣的格式。date指令及其-f選項。Time::Piece模組來解析時間戳記。bash 也能格式化日期,不需要任何外部工具。
給定一個整數時間值(自 epoch 起算的秒數),printf的%()T格式器就能套用「strftime」樣式的格式化。
epoch=1234567890
printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-13 18:31:30
# bash uses the `TZ` environment variable for the timezone.
TZ=Asia/Kolkata printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-14 05:01:30