你真的了解Python中的日期時間處理嗎?
time模塊
在time模塊中,時間有三種表現形式:
- 時間戳,一般指Unix時間戳,是從1970年開始到現在的秒數。
- 本地時間的struct_time形式:一個長度為11的命名元組,第一位為年,第二位為月....
- UTC時間的struct_time形式:一個長度為11的命名元組,類似於上個,只不過為UTC時間
其中後兩者的類型一致,區別在於一個是本地時間(localtime),一個是utc時間。
各種時間形式的獲取方式:
print("time stamp:", time.time()) # 時間戳:1479193181.829338nnprint("local time:", time.localtime()) # struct_time類型的本地時間ntime.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=14, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0)nnprint("utc time:", time.gmtime()) # struct_time類型的utc時間ntime.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=6, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0)n
這裡可以看出,本地時間(北京時間)和UTC時間相差8個小時。
各種時間形式的轉換:
time_stamp = time.time() # 時間戳nlocal_time = time.localtime(time_stamp)# 時間戳轉struct_time類型的本地時間nutc_time = time.gmtime(time_stamp) # 時間戳轉struct_time類型的utc時間nntime_stamp_1 = time.mktime(local_time) # struct_time類型的本地時間轉時間戳ntime_stamp_2 = calendar.timegm(utc_time)# struct_time類型的utc時間轉時間戳nprint(time_stamp, time_stamp_1, time_stamp_2)n
各種時間形式和字元串之間的轉換:
print(time.ctime(time_stamp)) # 時間戳轉字元串(本地時間字元串)nnprint(time.asctime(local_time)) # struct_time類型的本地時間轉字元串nprint(time.asctime(utc_time)) # struct_time類型的utc時間轉字元串nn# struct_time類型的本地時間轉字元串:自定義格式nprint(time.strftime("%Y-%m-%d, %H:%M:%S, %w", local_time))n# struct_time類型的utc時間轉字元串:自定義格式nprint(time.strftime("%Y-%m-%d, %H:%M:%S, %w", utc_time))nnstruct_time = time.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w") # 字元串轉struct_time類型n
datetime模塊
接下來再看datetime模塊。該模塊中包含4個主要的類:
- datetime.time:時間類,只包含時、分、秒、微秒等時間信息。
- datetime.date:日期類,只包含年、月、日、星期等日期信息。
- datetime.datetime:日期時間類,包含以上兩者的全部信息。
- datetime.timedelta:時間日期差值類,用來表示兩個datetime之間的差值。
關於各個類的基本用法比較簡單,建議看官方文檔:datetime module
這裡主要說一下datetime.datetime類的用法,其他兩個的用法類似,只有輕微差別:
a_datetime_local = datetime.datetime.now() # 獲取datetime.datetime類型的本地時間na_datetime_utc = datetime.datetime.utcnow() # 獲取datetime.datetime類型的utc時間nn# datetime.datetime類型轉字元串nprint(a_datetime_local.strftime("%Y-%m-%d, %H:%M:%S, %w")) n# datetime.datetime類型轉字元串nprint(a_datetime_utc.strftime("%Y-%m-%d, %H:%M:%S, %w")) nna_datetime = datetime.datetime.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w") # 字元串轉datetime.datetime格式n
datetime類型和時間戳、struct_time類型的相互轉換
datetime.datetime和時間戳、struct_time之間,也能夠相互轉換:
time_stamp = a_datetime_local.timestamp() # datetime類型轉時間戳nprint(time_stamp)nna_datetime_local = datetime.datetime.fromtimestamp(time.time()) # 時間戳轉datetime.datetime類型的本地時間na_datetime_utc = datetime.datetime.utcfromtimestamp(time.time()) # 時間戳轉datetime.datetime類型的utc時間nprint(a_datetime_local, a_datetime_utc)nnprint(a_datetime_local.timetuple()) # datetime類型轉struct_time類型nprint(a_datetime_utc.utctimetuple()) # datetime類型轉struct_time類型n
本文主要講了各種時間、日期類型的基本用法,以及他們之間相互轉換的方法,以及他們和字元串之間相互轉換的方法。
老規矩,文中代碼已上傳至github:https://github.com/xianhu/LearnPython
=============================================================
作者主頁:笑虎(Python愛好者,關注爬蟲、數據分析、數據挖掘、數據可視化等)
作者專欄主頁:擼代碼,學知識 - 知乎專欄
作者GitHub主頁:擼代碼,學知識 - GitHub
歡迎大家拍磚、提意見。相互交流,共同進步!
==============================================================
推薦閱讀:
※Beautiful Soup實踐
※[11] Python條件判斷語句(二)
※20170402Python變數類型 知識點梳理