時間格式

      在〈時間格式〉中尚無留言

時間格式是所有程式語言難記的東西,所以在此新增此篇進行說明。

time

time.time()可以取得目前系統的 TimeStamp (時間截記)。TimeStamp是指由 1970/01/01 0:0:0 到指定時間所經過的秒數。如下可以取得目前時間的 TimeStamp。

import time
t1=time.time()
print(f'目前的TimeStamp : {t1:,}秒')
結果:
目前的TimeStamp : 1,664,898,431.230126秒

如果想要知道某一段程式執行的秒數,可用如下方式

import time
t1=time.time()
for i in range(10000000):
    pass
t2=time.time()
print(f'花費時間 : {t2-t1}秒')
結果:
花費時間 : 0.16356658935546875秒

datetime

以前時間的計算,可以使用 time 函數,但現在不建議了,而是改用 datetime 方法。所以使用如下方式導入datetime類別。

from datetime import datetime

上述是很多初學者不明白的地方。其意思是 from datetime.py(檔案) import datatime(類別)

取得目前時間

datetime.now() 可以取得目前的 datetime 格式時間。current 是 datetime 格式,只不過在列印時,自動轉成了 string。

from datetime import datetime
current=datetime.now()
print(current)
結果:
2022-10-04 23:55:41.308959

datetime to string

正確將 datetime 格式轉成 string,需使用 strftime()函數,f 是 from 的意思。裏面的參數分別如下

%Y : 西元年
%m: 年
%d: 日
%H:時
%M:分
%s:秒
%f:毫秒
%w:星期幾
%W:本年的第幾周

from datetime import datetime
current=datetime.now()
s=current.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
print(s)
結果:
2022-10-04 23:59:02:886

string to datetime

若要使用字串建立 datetime 格式,有二種方式。

第一種是 datetime() 裏面傳入年月日時分秒等數字。
第二種是 datetime.strptime(字串, 格式),p 是 pointer的意思

from datetime import datetime
d1=datetime(2022,1,1)
d2=datetime.strptime("2021-01-01 10:30:25", "%Y-%m-%d %H:%M:%S")
print(d1)
print(d2)
結果:
2022-01-01 00:00:00
2021-01-01 10:30:25

timestamp to datetime

time.time() 取得 TimeStamp 後,可以轉成 datetime 格式

from datetime import datetime
import time
t1=time.time()
current=datetime.fromtimestamp(t1)
print(current)
結果:
2022-10-05 00:40:27.773955

datetime to timestamp

datetime 亦可以轉成 timestamp,如下所示

from datetime import datetime
current=datetime.now()
timestamp=current.timestamp()
print(f'TimeStamp : {timestamp:,}秒')
結果:
TimeStamp : 1,664,901,852.801957秒

相差天數

要計算二個時間點相差的天數,直接將二天的 datetime相減即可。相減之後傳回的 diff變數為 timedelta格式。diff.days 可以計算天數。

from datetime import datetime
current=datetime.now()
d1=datetime.strptime("1970-01-01 0:0:0", "%Y-%m-%d %H:%M:%S")
diff=current-d1
days=diff.days
print(f'1970/01/01 - 2022/10/05共有{days}天, 總共有{days*86400:,}秒')
結果:
1970/01/01 - 2022/10/05共有19270天, 總共有1,664,928,000秒

往前往後天數

要計算某日期往前或往後幾天的日期,需先import 下面二個類別。請注意 timedelta必需先撰寫

from datetime import timedelta
from datetime import datetime
亦可以使用如下
from datetime import timedelta datetime

再使用 datetime跟 timedelta相加,timedelta的 days若為負數,則往前推,正數則往後推。同時也有 hours, minutes, seconds 等參數,如下所示

from datetime import timedelta
from datetime import datetime
current=datetime.strftime(datetime.now(),'%Y-%m-%d')
current=datetime.strptime(current, '%Y-%m-%d')

prev=current+timedelta(days=-5)
next=current+timedelta(days=5)
print(f"今天  : {current.strftime('%Y-%m-%d')}")
print(f"5天前 : {prev.strftime('%Y-%m-%d')}")
print(f"5天後 : {next.strftime('%Y-%m-%d')}")
結果:
今天  : 2022-10-05
5天前 : 2022-09-30
5天後 : 2022-10-10

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *