Python CheatSheet-日期、時間控制與datetime模塊使用

本文根據Python2的官方文檔展開,鏈接在此

1. datetime模塊介紹:

有下面幾種類:

datetime.date

就是存的公曆日期,有三個屬性,year,month,day

datetime.time

存的是時間,屬性有hour, minute, second, microsecond, and tzinfo。沒有年月日

datetime.datetime

存的是日期和時間,屬性有year, month, day, hour, minute, second, microsecond, and tzinfo.

datetime.timedelta

存的是日期或時間差,精度是microsecond。正值對應更晚的時間或日期。比如

import datetime
oneDay = datetime.timedelta(days = 1)

!!!注意!!!

timedelta的最大單位是days,所以不要指望能夠加一個月甚至一年!

datetime.tzinfo

是跟time zone相關,在不同時區轉換中有用。

2. 日期操作

對於date objects,有三種方式,鏈接在這裏。這裏就講講我自己常用的:

建立date對象:

可以從date.today()建立當前日期的date對象

也可以直接用date命令直接建立。比如

也可以用datetime.strptime()先建立datetime對象,再用.date()命令將datetime轉換成date。比如

import datetime
today1 = datetime.date.today()
today2 = datetime.date(2019, 4, 20)
today3 = datetime.datetime.strptime('2019-04-20', '%Y-%m-%d')
today4 = today3.date()

date的變換/操作

對已有的date,加減timedelta獲得新的日期。

也可用replace命令,將年、月、日中的一個或多個替換成指定值。

兩個date之間的減法將得到timedelta,對應日期差。

返回成字符串:

date對象可以用.isoformat()命令直接返回'2019-02-28'這樣的string

date對象在如果用print(),或者%s的格式化字符串打出的就是'2019-02-28'這樣的string。

也可用date.strftime(format)命令,返回其他指定格式的日期字符串。

3. datetime和date之間轉換:

datetime轉date只需要用.date()命令,date轉datetime需要補上後面的時間,所以代碼中有一個datetime.datetime.min.time()。如下:

import datetime
# convert date to datetime
todayDate = datetime.date.today()
todayDatetime = datetime.datetime.combine(todayDate, datetime.datetime.min.time())

# convert datetime to date
nowDatetime = datetime.datetime.now()
nowDate = nowDatetime.date()

4. 截取當前時間,計算時間差 

這個的典型應用就是記錄程序、模塊、代碼的運行起止時間和耗時,可以用datetime記錄當前時刻,然後用兩個datetime相減,獲得日期和時間差,前面說過了兩個datetime相減的日期和時間差將以timedelta來保存。

datetime.datetime.timedelta有三個屬性:

days:時間差是多少天

seconds:時間差是多少秒

microseconds:時間差是多少微秒

5. 小總結:

# import datetime
# 1. 顯示當前時間
now_datetime = datetime.datetime.now()
print(now_datetime)
2019-04-27 21:45:11.753420
type(now_datetime)
<type 'datetime.datetime'>

# 2. strftime和strptime
# strptime是將字符串轉換成datetime的date或datetime或time類型
# strftime是將datetime的date或datetime或time類型轉換成字符串
# 比如
date1 = datetime.date(2019, 4, 27)
date_str2 = datetime.datetime.strftime(date1, '%Y-%m-%d')
datetime3 = datetime.datetime.strptime(date_str2, '%Y-%m-%d')
date4 = datetime.datetime.strptime(date_str2,'%Y-%m-%d').date()

PS:

1. 注意幾個坑:

timedelta的最大單位是days,所以不能用它直接加一個月或一年。

replace的時候,小心變量不要超出範圍,比如月份大於12或小於1之類的。

2. strftime()和strptime()用到的format:

可以參考這個鏈接。典型的比如:

%y,年份後兩位,%Y年份四位

%m,月份兩位數字

%d,日期兩位數字

%H,小時兩位數字

%M,分鐘兩位數字

%S,秒兩位數字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章