1)time模塊中時間表現的格式主要有三種:
a、timestamp時間戳,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量
b、struct_time時間元組,共有九個元素組。
c、formattime 格式化時間,已格式化的結構使時間更具可讀性。包括自定義格式和固定格式。
datatime模塊重新封裝了time模塊,提供更多接口,提供的類有:date,time,datetime,timedelta,tzinfo;
2)struct_time元組元素結構
屬性 值 tm_year(年) 比如2011 tm_mon(月) 1 - 12 tm_mday(日) 1 - 31 tm_hour(時) 0 - 23 tm_min(分) 0 - 59 tm_sec(秒) 0 - 61 tm_wday(weekday) 0 - 6(0表示周日) tm_yday(一年中的第幾天) 1 - 366 tm_isdst(是否是夏令時) 默認為-1 |
3)format time結構化表示
格式 含義 %a 本地(locale)簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化月份名稱 %B 本地完整月份名稱 %c 本地相應的日期和時間表示 %d 一個月中的第幾天(01 - 31) %H 一天中的第幾個小時(24小時制,00 - 23) %I 第幾個小時(12小時制,01 - 12) %j 一年中的第幾天(001 - 366) %m 月份(01 - 12) %M 分鐘數(00 - 59) %p 本地am或者pm的相應符 %S 秒(01 - 61) %U 一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。 %w 一個星期中的第幾天(0 - 6,0是星期天) %W 和%U基本相同,不同的是%W以星期一為一個星期的開始。 %x 本地相應日期 %X 本地相應時間 %y 去掉世紀的年份(00 - 99) %Y 完整的年份 %Z 時區的名字(如果不存在為空字符) %% ‘%’字符 |
4)主要time生成方法和time格式轉換方法
獲取當前時間timestamp>>>import time>>>time.time1487140522.975生成struct_time>>>time.localtime()time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=14, tm_min=52, tm_sec=34, tm_wday=2, tm_yday=46,tm_isdst=0)timestamp轉換成struct_time本地時間>>>time.localtime(time.time())time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=14, tm_min=36, tm_sec=29, tm_wday=2, tm_yday=46,tm_isdst=0)timestamp轉換成struct_time 格林威治時間>>>time.gmtime()>>>time.gmtime(time.time())time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=6, tm_min=57, tm_sec=30, tm_wday=2, tm_yday=46,tm_isdst=0)struct_time轉換成timestamp>>>time.mktime(time.localtime())1487141742.0struct_time轉換成format_time>>>time.strftime("%Y-%m-%d%X")>>>time.strftime("%Y-%m-%d%X",time.localtime())'2017-02-1515:12:29'生成固定格式的時間表示格式>>>time.asctime(time.localtime())>>>time.ctime(time.time())'WedFeb 15 15:13:09 2017'常見結構化時間組合>>>PRint time.strftime("%Y-%m-%d %X")2017-02-1515:23:40time加減#timestamp加減單位以秒為單位
>>>import time>>>t1= time.time()>>>t2=t1+10>>>print time.ctime(t1)#Wed Oct 26 21:15:30 2016>>>print time.ctime(t2)#Wed Oct 26 21:15:40 2016WedFeb 15 15:24:53 2017WedFeb 15 15:25:03 2017datetime模塊datetime是Python處理日期和時間的標準庫。注意到datetime是模塊,datetime模塊還包含一個datetime類,通過fromdatetime import datetime導入的才是datetime這個類。如果僅導入import datetime,則必須引用全名datetime.datetime。
獲取當前日期和時間>>>from datetime import datetime>>> now = datetime.now() # 獲取當前datetime>>>print(now)2015-05-1816:28:07.198690>>>print(type(now))<class'datetime.datetime'>獲取指定日期和時間要指定某個日期和時間,我們直接用參數構造一個datetime:
>>>from datetime import datetime>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期時間創建datetime>>>print(dt)2015-04-1912:20:00datetime轉換為timestamp在計算機中,時間實際上是用數字表示的。我們把1970年1月1日 00:00:00 UTC+00:00時區的時刻稱為epoch time,記為0(1970年以前的時間timestamp為負數),當前時間就是相對于epoch time的秒數,稱為timestamp。
可以認為:
timestamp= 0 = 1970-1-1 00:00:00 UTC+0:00
對應的北京時間是:
timestamp= 0 = 1970-1-1 08:00:00 UTC+8:00
可見timestamp的值與時區毫無關系,因為timestamp一旦確定,其UTC時間就確定了,轉換到任意時區的時間也是完全確定的,這就是為什么計算機存儲的當前時間是以timestamp表示的,因為全球各地的計算機在任意時刻的timestamp都是完全相同的(假定時間已校準)。
把一個datetime類型轉換為timestamp只需要簡單調用timestamp()方法:
>>>from datetime import datetime>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期時間創建datetime>>> dt.timestamp() # 把datetime轉換為timestamp1429417200.0
注意Python的timestamp是一個浮點數。如果有小數位,小數位表示毫秒數。
timestamp轉換為datetime要把timestamp轉換為datetime,使用datetime提供的fromtimestamp()方法:
>>>from datetime import datetime>>>t = 1429417200.0>>>print(datetime.fromtimestamp(t))2015-04-1912:20:00注意到timestamp是一個浮點數,它沒有時區的概念,而datetime是有時區的。上述轉換是在timestamp和本地時間做轉換。本地時間是指當前操作系統設定的時區。
str轉換為datetime很多時候,用戶輸入的日期和時間是字符串,要處理日期和時間,首先必須把str轉換為datetime。轉換方法是通過datetime.strptime()實現,需要一個日期和時間的格式化字符串:
>>>from datetime import datetime>>>cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')>>>print(cday)2015-06-0118:19:59字符串'%Y-%m-%d%H:%M:%S'規定了日期和時間部分的格式。詳細的說明參考Python文檔。
注意轉換后的datetime是沒有時區信息的。
datetime轉換為str如果已經有了datetime對象,要把它格式化為字符串顯示給用戶,就需要轉換為str,轉換方法是通過strftime()實現的,同樣需要一個日期和時間的格式化字符串:
>>>from datetime import datetime>>>now = datetime.now()>>>print(now.strftime('%a, %b %d %H:%M'))Mon,May 05 16:28datetime加減對日期和時間進行加減實際上就是把datetime往后或往前計算,得到新的datetime。加減可以直接用+和-運算符,不過需要導入timedelta這個類:
>>>from datetime import datetime, timedelta>>>now = datetime.now()>>>nowdatetime.datetime(2015,5, 18, 16, 57, 3, 540997)>>>now + timedelta(hours=10)datetime.datetime(2015,5, 19, 2, 57, 3, 540997)>>>now - timedelta(days=1)datetime.datetime(2015,5, 17, 16, 57, 3, 540997)>>>now + timedelta(days=2, hours=12)datetime.datetime(2015,5, 21, 4, 57, 3, 540997)
新聞熱點
疑難解答