Python3的日期和時間
python 中處理日期時間資料通常使用datetime和time庫
因為這兩個庫中的一些功能有些重複,所以,首先我們來比較一下這兩個庫的區別,這可以幫助我們在適當的情況下時候合適的庫。
在Python文件裡,time是歸類在Generic Operating System Services中,換句話說,它提供的功能是更加接近於作業系統層面的。通讀文件可知,time模組是圍繞著 Unix Timestamp 進行的。
time庫主要包括一個類 struct_time,另外其他幾個函式及相關常量。 需要注意的是在該模組中的大多數函式是呼叫了所在平臺C library的同名函式, 所以要特別注意有些函式是平臺相關的,可能會在不同的平臺有不同的效果。另外一點是,由於是基於Unix Timestamp,所以其所能表述的日期範圍被限定在 1970 - 2038 之間,如果你寫的程式碼需要處理在前面所述範圍之外的日期,那可能需要考慮使用datetime模組更好。
所以我們可以得到這樣的結論:一般情況下我們會使用datetime庫來處理日期和時間,而需要使用一些只有time庫提供的函式時再單獨引用,例如:sleep函式。
datetiem庫的使用方法,以及常用函式
datetime庫中定義了5個類,分別是
1、date:表示日期
2、dateitme:表示日期和時間
3、time:表示時間
4、timedelta:表示時間間隔
5、tzinfo:時區相關資訊
一、datetime.date類
date類可以用年月日引數進行初始化
day1 = datetime.date(2019, 4, 19)
常用方法:
1、ctime(),返回格式如 Sun Apr 16 00:00:00 2019
>>> day1.ctime()
'Fri Apr 19 00:00:00 2019'
2、fromtimestamp(timestamp)根據給定時間戳,返回一個date物件
>>> datetime.date.fromtimestamp(1555683831)
datetime.date(2019, 4, 19)
3、today() 返回一個代表今天日期的date物件
>>> datetime.date.today()
datetime.date(2019, 4, 19)
4、isocalendar() 返回格式如(年份, 第幾周, 一週中第幾天)的元組
>>> day1.isocalendar()
(2019, 16, 5)
上面資料表示day1是2019年第16周的星期5
5、isoformat() 返回格式為YYYY-MM-DD格式的字串
>>> day1.isoformat()
'2019-04-19'
6、isoweekday() 返回日期是星期幾,1到7分別表示星期一到星期日
>>> day1.isoweekday()
5
上面資料表示day1(2019年4月19日)是星期5
7、replace(year, month, day);返回一個新date物件,替換指定年、月、日,沒有替換的保持不變
>>> day1
datetime.date(2019, 4, 19)
>>> day1.replace(2018)
datetime.date(2018, 4, 19) # 這裡年份被替換了
>>> day1
datetime.date(2019, 4, 19) # 物件本身並不會變化
>>> day1.replace(year=2017, day=20)
datetime.date(2017, 4, 20) # 這裡指定了替換年和日,月份保持不變
8、strftime(format) 根據引數對date物件進行格式化輸出
>>> day1.strftime('%Y-%m-%d')
'2019-04-19' # 這個格式與isoformat等價
format引數中試用的日期格式化符號有:
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身
9、timetuple() 返回日期對應的time.struct_time物件
>>> day1.timetuple()
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=109, tm_isdst=-1)
10、weekday() 返回日期的星期數,為0至6,0表示星期一,6表示星期日
>>> day1.weekday()
4 # 這裡4表示的是星期5,這和isoweekday不同
二、datetime.time類
time類有5個引數datetime.time(hour(小時), minute(分鐘), second(秒), microsecond(微秒), tzinfo(時區)),在這裡時區暫不討論。
小時是必須的引數,其他視情況而定。
1、replace() 替換時間引數
2、strftime(format) 根據format格式返回時間字串
三、 datetime.datetime類
1、ctime() 返回格式如 Sun Apr 16 00:00:00 2019
2、now() 返回一個表示當前系統日期和時間的datetime物件
>>> datetime1= datetime.datetime.now()
>>> datetime1
datetime.datetime(2019, 4, 19, 23, 41, 15, 697288)
3、date() 返回一個表示datetime物件日期的date物件
>>> datetime1.date()
datetime.date(2019, 4, 19)
4、time() 返回一個表示datetime物件時間的time物件
>>> datetime1.time()
datetime.time(23, 41, 15, 697288)
5、fromtimestamp(timestamp) 根據指定時間戳返回一個datetime物件
6、replace() 返回一個新的datetime物件,替換某個日期和時間引數其餘保持不變
7、strftime(format) 根據format引數格式化輸出
8、datatime.datetime.strptime(time_string, format) 將字串time_string轉換成datetime物件,字串的日期格式由format指定
>>> datetime2 = datetime.datetime.strptime('2019-04-19 21:05:35','%Y-%m-%d %H:%M:%S')
>>> datetime2
datetime.datetime(2019, 4, 19, 21, 5, 35)
四、datetime.timedelta類
這個類主要用於進行兩個日期的計算,例如:
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> a
datetime.datetime(2019, 4, 19, 23, 56, 32, 487326)
>>> b
datetime.datetime(2019, 4, 19, 23, 56, 42, 84236)
>>> b-a
datetime.timedelta(seconds=9, microseconds=596910)
>>> (b-a).seconds
9
>>> b = b.replace(year=2018, month=5)
>>> b
datetime.datetime(2018, 5, 19, 23, 56, 42, 84236)
>>> a -b
datetime.timedelta(days=334, seconds=86390, microseconds=403090)
>>> (a-b).seconds
86390
>>> (a-b).total_seconds()
28943990.40309
給時間加一小時
>>> time1 = datetime.datetime.now()
>>> one_hour = datetime.timedelta(hours=1)
>>> time1
datetime.datetime(2019, 4, 20, 0, 11, 21, 174662)
>>> time1 + one_hour
datetime.datetime(2019, 4, 20, 1, 11, 21, 174662)
類似的如果把timedelta引數設定為你要變動的時間大小,在進行加減運算就可以