在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python的時間處理模塊中處理日期與時間的全面總結

馬哥Linux運維 ? 來源:標點符 ? 作者:錢魏Way ? 2021-10-12 09:24 ? 次閱讀

Python的時間處理模塊在日常的使用中用的較多,但是使用的時候基本上都是要查資料,還是有些麻煩的,梳理下,便于以后方便的使用。

時間相關概念

在1967年的第13屆國際度量衡會議上決定以原子時定義的秒作為時間的國際標準單位:銫133原子基態的兩個超精細能階間躍遷對應輻射的9,192,631,770個周期的持續時間, 起始歷元定在1958年1月1日0時。

原子鐘是一種時鐘,它以原子共振頻率標準來計算及保持時間的準確。原子鐘是世界上已知最準確的時間測量和頻率標準。

GMT格林威治標準時間(Greenwich Mean Time),是指位于倫敦郊區的皇家格林威治天文臺的標準時間,因為本初子午線(Prime meridian)被定義為通過那里的經線。GMT也叫世界時UT。

UTC協調世界時間(Coordinated Universal Time), 又稱世界標準時間,基于國際原子鐘,誤差為每日數納秒。協調世界時的秒長與原子時的秒長一致,在時刻上則要求盡量與世界時接近(規定二者的差值保持在 0.9秒以內)。

閏秒不只有閏年,還有閏秒。閏秒是指為保持協調世界時接近于世界時時刻,由國際計量局統一規定在年底或年中(也可能在季末)對協調世界時增加或減少1秒的調整。由于地球自轉的不均勻性和長期變慢性(主要由潮汐摩擦引起的),會使世界時(民用時)和原子時之間相差超過到±0.9秒時,就把世界時向前撥1秒(負閏秒,最后一分鐘為59秒)或向后撥1秒(正閏秒,最后一分鐘為61秒);閏秒一般加在公歷年末或公歷六月末。

時區是地球上的區域使用同一個時間定義。有關國際會議決定將地球表面按經線從南到北,劃分成24個時區,并且規定相鄰區域的時間相差1小時。當人們跨過一個區域,就將自己的時鐘校正1小時(向西減1小時,向東加1小時),跨過幾個區域就加或減幾小時。比如我大中國處于東八區,表示為GMT+8。

夏令時(Daylight Saving Time:DST),又稱日光節約時制、日光節約時間或夏令時間。這是一種為節約能源而人為規定地方時間的制度,在夏天的時候,白天的時間會比較長,所以為了節約用電,因此在夏天的時候某些地區會將他們的時間定早一小時,也就是說,原本時區是8點好了,但是因為夏天太陽比較早出現,因此把時間向前挪,在原本8點的時候,訂定為該天的9點(時間提早一小時)~如此一來,我們就可以利用陽光照明,省去了花費電力的時間,因此才會稱之為夏季節約時間!

Unix時間戳指的是從協調世界時(UTC)1970年1月1日0時0分0秒開始到現在的總秒數,不考慮閏秒。

Python time模塊

在 Python 文檔里,time是歸類在Generic Operating System Services中,換句話說, 它提供的功能是更加接近于操作系統層面的。通讀文檔可知,time 模塊是圍繞著 Unix Timestamp 進行的。

該模塊主要包括一個類 struct_time,另外其他幾個函數及相關常量。需要注意的是在該模塊中的大多數函數是調用了所在平臺C library的同名函數, 所以要特別注意有些函數是平臺相關的,可能會在不同的平臺有不同的效果。
另外一點是,由于是基于Unix Timestamp,所以其所能表述的日期范圍被限定在 1970 – 2038 之間,如果你寫的代碼需要處理在前面所述范圍之外的日期,那可能需要考慮使用datetime模塊更好。

獲取當前時間和轉化時間格式

  • time() 返回時間戳格式的時間 (相對于1.1 0000以秒計算的偏移量)
  • ctime() 返回字符串形式的時間,可以傳入時間戳格式時間,用來做轉化
  • asctime() 返回字符串形式的時間,可以傳入struct_time形式時間,用來做轉化
  • localtime() 返回當前時間的struct_time形式,可傳入時間戳格式時間,用來做轉化
  • gmtime() 返回當前時間的struct_time形式,UTC時區(0時區) ,可傳入時間戳格式時間,用來做轉化
>>>importtime
>>>time.time()
1473386416.954
>>>time.ctime()
'FriSep0910252016'
>>>time.ctime(time.time())
'FriSep0910082016'
>>>time.asctime()
'FriSep0910402016'
>>>time.asctime(time.localtime())
'FriSep0910002016'
>>>time.localtime()
time.struct_time(tm_year=2016,tm_mon=9,tm_mday=9,tm_hour=10,tm_min=1,tm_sec=19,tm_wday=4,tm_yday=253,tm_isdst=0)
>>>time.localtime(time.time())
time.struct_time(tm_year=2016,tm_mon=9,tm_mday=9,tm_hour=10,tm_min=19,tm_sec=11,tm_wday=4,tm_yday=253,tm_isdst=0)
>>>time.gmtime()
time.struct_time(tm_year=2016,tm_mon=9,tm_mday=9,tm_hour=2,tm_min=13,tm_sec=10,tm_wday=4,tm_yday=253,tm_isdst=0)
>>>time.gmtime(time.time())
time.struct_time(tm_year=2016,tm_mon=9,tm_mday=9,tm_hour=2,tm_min=15,tm_sec=35,tm_wday=4,tm_yday=253,tm_isdst=0)

struct_time共有9個元素,其中前面6個為年月日時分秒,后面三個分別代表的含義為:

  • tm_wday 一周的第幾天(周日是0)
  • tm_yday 一年的第幾天
  • tm_isdst 是否是夏令時

時間格式化

time.mktime()

將一個以struct_time格式轉換為時間戳

>>>time.mktime(time.localtime())
1473388585.0

time.strftime(format[,t]) 把一個struct_time時間轉化為格式化的時間字符串。如果t未指定,將傳入time.localtime()。如果元組中任何一個元素越界,ValueError的錯誤將會被拋出。

  • %c 本地相應的日期和時間表示
  • %x 本地相應日期
  • %X 本地相應時間
  • %y 去掉世紀的年份(00 – 99)
  • %Y 完整的年份
  • %m 月份(01 – 12)
  • %b 本地簡化月份名稱
  • %B 本地完整月份名稱
  • %d 一個月中的第幾天(01 – 31)
  • %j 一年中的第幾天(001 – 366)
  • %U 一年中的星期數。(00 – 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。
  • %W 和%U基本相同,不同的是%W以星期一為一個星期的開始。
  • %w 一個星期中的第幾天(0 – 6,0是星期天)
  • %a 本地(locale)簡化星期名稱
  • %A 本地完整星期名稱
  • %H 一天中的第幾個小時(24小時制,00 – 23)
  • %I 第幾個小時(12小時制,01 – 12)
  • %p 本地am或者pm的相應符,“%p”只有與“%I”配合使用才有效果。
  • %M 分鐘數(00 – 59)
  • %S 秒(01 – 61),文檔中強調確實是0 – 61,而不是59,閏年秒占兩秒
  • %Z 時區的名字(如果不存在為空字符)
  • %% ‘%’字符
>>>time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())
'2016-09-091021'

time.strptime(string[,format])

把一個格式化時間字符串轉化為struct_time。實際上它和strftime()是逆操作。

>>>time.strptime(time.ctime())
time.struct_time(tm_year=2016,tm_mon=9,tm_mday=9,tm_hour=11,tm_min=0,tm_sec=4,tm_wday=4,tm_yday=253,tm_isdst=-1)

計時器功能

time.sleep(secs)

線程推遲指定的時間運行。單位為秒。

time.clock()

這個需要注意,在不同的系統上含義不同。在UNIX系統上,它返回的是“進程時間”,它是用秒表示的浮點數(時間戳)。而在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次之后的調用是自第一次調用以后到現在的運行時間。(實際上是以WIN32上QueryPerformanceCounter()為基礎,它比毫秒表示更為精確)

importtime
time.sleep(1)
print("clock1:%s"%time.clock())
time.sleep(1)
print("clock2:%s"%time.clock())
time.sleep(1)
print("clock3:%s"%time.clock())

運行結果為:

clock1:1.57895443216e-06
clock2:1.00064381867
clock3:2.00158724394

其中第一個clock()輸出的是程序運行時間,第二、三個clock()輸出的都是與第一個clock的時間間隔

time模塊其他內置函數

  • altzone() 返回格林威治西部的夏令時地區的偏移秒數。如果該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啟用地區才能使用。
  • tzset() 根據環境變量TZ重新初始化時間相關設置。

time模塊包含的屬性

  • timezone 是當地時區(未啟動夏令時)距離格林威治的偏移秒數(>0,美洲;<=0大部分歐洲,亞洲,非洲)。
  • tzname 包含一對根據情況的不同而不同的字符串,分別是帶夏令時的本地時區名稱和不帶的。
importtime
print(time.timezone)
print(time.tzname)
print(time.tzname[0].decode("GBK"))
print(time.tzname[1].decode("GBK"))

運行結果

-28800
('xd6xd0xb9xfaxb1xeaxd7xbcxcaxb1xbcxe4','xd6xd0xb9xfaxcfxc4xc1xeexcaxb1')
中國標準時間
中國夏令時

datetime模塊

datetime 比 time 高級了不少,可以理解為 datetime 基于 time 進行了封裝,提供了更多實用的函數。

datetime模塊定義了下面這幾個類:

  • date:表示日期的類。常用的屬性有year, month, day
  • time:表示時間的類。常用的屬性有hour, minute, second, microsecond
  • datetime:表示日期時間
  • timedelta:表示時間間隔,即兩個時間點之間的長度
  • tzinfo:與時區有關的相關信息

注:上面這些類型的對象都是不可變(immutable)的。

date類

date類定義了一些常用的類方法與類屬性:

  • max、min:date對象所能表示的最大、最小日期
  • resolution:date對象表示日期的最小單位。這里是天
  • today():返回一個表示當前本地日期的date對象
  • fromtimestamp(timestamp):根據給定的時間戮,返回一個date對象
  • fromordinal(ordinal):將Gregorian日歷時間轉換為date對象(特殊歷法用不上)
fromdatetimeimportdate
importtime
print('date.max:',date.max)
print('date.min:',date.min)
print('date.resolution:',date.resolution)
print('date.today():',date.today())
print('date.fromtimestamp():',date.fromtimestamp(time.time()))

執行結果:

date.max:9999-12-31
date.min:0001-01-01
date.resolution:1day,0:00:00
date.today():2016-09-12
date.fromtimestamp():2016-09-12

date提供的實例方法和屬性:

  • .year:返回年
  • .month:返回月
  • .day:返回日
  • .replace(year, month, day):生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性。(原有對象仍保持不變)
  • .weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此類推
  • .isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此類推
  • .isocalendar():返回格式如(year, wk num, wk day)
  • .isoformat():返回格式如’YYYY-MM-DD’的字符串
  • .strftime(fmt):自定義格式化字符串。與time模塊中的strftime類似。
  • .toordinal():返回日期對應的Gregorian Calendar日期
fromdatetimeimportdate
today=date.today()
print('today:',today)
print('.year:',today.year)
print('.month:',today.month)
print('.replace():',today.replace(year=2017))
print('.weekday():',today.weekday())
print('.isoweekday():',today.isoweekday())
print('.isocalendar():',today.isocalendar())
print('.isoformat():',today.isoformat())
print('.strftime():',today.strftime('%Y-%m-%d'))
print('.toordinal():',today.toordinal())

執行結果:

today:2016-09-12
.year:2016
.month:9
.replace():2017-09-12
.weekday():0
.isoweekday():1
.isocalendar():(2016,37,1)
.isoformat():2016-09-12
.strftime():2016-09-12
.toordinal():736219

date還對某些操作進行了重載,它允許我們對日期進行如下一些操作:

  • date2 = date1 + timedelta # 日期加上一個間隔,返回一個新的日期對象
  • date2 = date1 – timedelta # 日期減去一個間隔,返回一個新的日期對象
  • timedelta = date1 – date2 # 兩個日期相減,返回一個時間間隔對象
  • date1 < date2 # 兩個日期進行比較

time類

time類的構造函數如下:(其中參數tzinfo,它表示時區信息。)

class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]])

time類定義的類屬性:

  • min、max:time類所能表示的最小、最大時間。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999)
  • resolution:時間的最小單位,這里是1微秒

time類提供的實例方法和屬性:

  • .hour、.minute、.second、.microsecond:時、分、秒、微秒
  • .tzinfo:時區信息
  • .replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):創建一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性(原有對象仍保持不變);
  • .isoformat():返回型如”HHSS”格式的字符串表示;
  • .strftime(fmt):返回自定義格式化字符串。

像date一樣,也可以對兩個time對象進行比較,或者相減返回一個時間間隔對象。這里就不提供例子了。

datetime類

datetime是date與time的結合體,包括date與time的所有信息。它的構造函數如下:datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]),各參數的含義與date、time的構造函數中的一樣,要注意參數值的范圍。

datetime類定義的類屬性與方法:

  • min、max:datetime所能表示的最小值與最大值;
  • resolution:datetime最小單位;
  • today():返回一個表示當前本地時間的datetime對象;
  • now([tz]):返回一個表示當前本地時間的datetime對象,如果提供了參數tz,則獲取tz參數所指時區的本地時間;
  • utcnow():返回一個當前utc時間的datetime對象;
  • fromtimestamp(timestamp[, tz]):根據時間戮創建一個datetime對象,參數tz指定時區信息;
  • utcfromtimestamp(timestamp):根據時間戮創建一個datetime對象;
  • combine(date, time):根據date和time,創建一個datetime對象;
  • strptime(date_string, format):將格式字符串轉換為datetime對象;
fromdatetimeimportdatetime
importtime
print('datetime.max:',datetime.max)
print('datetime.min:',datetime.min)
print('datetime.resolution:',datetime.resolution)
print('today():',datetime.today())
print('now():',datetime.now())
print('utcnow():',datetime.utcnow())
print('fromtimestamp(tmstmp):',datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):',datetime.utcfromtimestamp(time.time()))

運行結果:

datetime.max:9999-12-3123:59:59.999999
datetime.min:0001-01-0100:00:00
datetime.resolution:0:00:00.000001
today():2016-09-1219:57:00.761000
now():2016-09-1219:57:00.761000
utcnow():2016-09-1211:57:00.761000
fromtimestamp(tmstmp):2016-09-1219:57:00.761000
utcfromtimestamp(tmstmp):2016-09-1211:57:00.761000

datetime類提供的實例方法與屬性(很多屬性或方法在date和time中已經出現過,在此有類似的意義,這里只羅列這些方法名,具體含義不再逐個展開介紹,可以參考上文對date與time類的講解。):

year、month、day、hour、minute、second、microsecond、tzinfo:

  • date():獲取date對象;
  • time():獲取time對象;
  • replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]):
  • timetuple()
  • utctimetuple()
  • toordinal()
  • weekday()
  • isocalendar()
  • isoformat([sep])
  • ctime():返回一個日期時間的C格式字符串,等效于ctime(time.mktime(dt.timetuple()));
  • strftime(format)

像date一樣,也可以對兩個datetime對象進行比較,或者相減返回一個時間間隔對象,或者日期時間加上一個間隔返回一個新的日期時間對象。

timedelta類

通過timedelta函數返回一個timedelta對象,也就是一個表示時間間隔的對象。函數參數情況如下所示:

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

其沒有必填參數,簡單控制的話第一個整數就是多少天的間隔的意思:

datetime.timedelta(10)

兩個時間間隔對象可以彼此之間相加或相減,返回的仍是一個時間間隔對象。而更方便的是一個datetime對象如果減去一個時間間隔對象,那么返回的對應減去之后的datetime對象,然后兩個datetime對象如果相減返回的是一個時間間隔對象。這很是方便。

tzinfo類

tzinfo是一個抽象類,不能被直接實例化。需要派生子類,提供相應的標準方法。datetime模塊并不提供tzinfo的任何子類。最簡單的方式是使用pytz模塊。

pytz模塊

pytz是Python的一個時區處理模塊(同時也包括夏令時),在理解時區處理模塊之前,需要先要了解一些時區的概念。

要知道時區之間的轉換關系,其實這很簡單:把當地時間減去當地時區,剩下的就是格林威治時間了。例如北京時間的18:00就是1800,相減以后就是1000,因此就是格林威治時間的10:00。

Python的datetime可以處理2種類型的時間,分別為offset-naive和offset-aware。前者是指沒有包含時區信息的時間,后者是指包含時區信息的時間,只有同類型的時間才能進行減法運算和比較。

datetime模塊的函數在默認情況下都只生成offset-naive類型的datetime對象,例如now()、utcnow()、fromtimestamp()、utcfromtimestamp()和strftime()。其中now()和fromtimestamp()可以接受一個tzinfo對象來生成offset-aware類型的datetime對象,但是標準庫并不提供任何已實現的tzinfo類,只能自己實現。

下面就是實現格林威治時間和北京時間的tzinfo類的例子:

ZERO_TIME_DELTA=timedelta(0)
LOCAL_TIME_DELTA=timedelta(hours=8)#本地時區偏差
classUTC(tzinfo):
defutcoffset(self,dt):
returnZERO_TIME_DELTA
defdst(self,dt):
returnZERO_TIME_DELTA
classLocalTimezone(tzinfo):
defutcoffset(self,dt):
returnLOCAL_TIME_DELTA
defdst(self,dt):
returnZERO_TIME_DELTA
deftzname(self,dt):
return'+08:00'

一個tzinfo類需要實現utcoffset、dst和tzname這3個方法。其中utcoffset需要返回夏時令的時差調整;tzname需要返回時區名,如果你不需要用到的話,也可以不實現。

一旦生成了一個offset-aware類型的datetime對象,我們就能調用它的astimezone()方法,生成其他時區的時間(會根據時差來計算)。而如果拿到的是offset-naive類型的datetime對象,也是可以調用它的replace()方法來替換tzinfo的,只不過這種替換不會根據時差來調整其他時間屬性。因此,如果拿到一個格林威治時間的offset-naive類型的datetime對象,直接調用replace(tzinfo=UTC())即可轉換成offset-aware類型,然后再調用astimezone()生成其他時區的datetime對象。

看上去一切都很簡單,但不知道你還是否記得上文所述的夏時令。提起夏時令這個玩意,真是讓我頭疼,因為它沒有規則可循:有的國家實行夏時令,有的國家不實行,有的國家只在部分地區實行夏時令,有的地區只在某些年實行夏時令,每個地區實行夏時令的起止時間都不一定相同,而且有的地方TMD還不是用幾月幾日來指定夏時令的起止時間的,而是用某月的第幾個星期幾這種形式。

pytz模塊,使用Olson TZ Database解決了跨平臺的時區計算一致性問題,解決了夏令時帶來的計算問題。由于國家和地區可以自己選擇時區以及是否使用夏令時,所以pytz模塊在有需要的情況下得更新自己的時區以及夏令時相關的信息。

pytz提供了全部的timezone信息,如:

importpytz
print(len(pytz.all_timezones))
print(len(pytz.common_timezones))

運行結果:

588
436

如果需要獲取某個國家的時區,可以使用如下方式:

importpytz
print(pytz.country_timezones('cn'))

執行結果:

[u'Asia/Shanghai', u'Asia/Urumqi']

中國一個有兩個時區,一個為上海,一個為烏魯木齊,我們來看下我們有什么區別:

fromdatetimeimportdatetime
importpytz
print(pytz.country_timezones('cn'))
tz1=pytz.timezone(pytz.country_timezones('cn')[0])
print(tz1)
print(datetime.now(tz1))
tz2=pytz.timezone(pytz.country_timezones('cn')[1])
print(tz2)
print(datetime.now(tz2))

執行結果:

[u'Asia/Shanghai',u'Asia/Urumqi']
Asia/Shanghai
2016-09-1409:55:39.384000+08:00
Asia/Urumqi
2016-09-1407:55:39.385000+06:00

可以看到上海是東八區,而烏魯木齊是東六區。

時區轉換

操作起來有而比較簡單,本地時區與UTC的互轉:

fromdatetimeimportdatetime
importpytz
now=datetime.now()
tz=pytz.timezone('Asia/Shanghai')
print(tz.localize(now))
print(pytz.utc.normalize(tz.localize(now)))

執行結果:

2016-09-1410:25:44.633000+08:00
2016-09-1402:25:44.633000+00:00

使用astimezone()可以進行時區與時區之間的轉換。

fromdatetimeimportdatetime
importpytz
utc=pytz.utc
beijing_time=pytz.timezone('Asia/Shanghai')
japan_time=pytz.timezone('Asia/Tokyo')
now=datetime.now(beijing_time)
print("BeijingTime:",now)
print("UTC:",now.astimezone(utc))
print("JAPANTIME:",now.astimezone(japan_time))

執行結果:

BeijingTime:2016-09-1410:19:22.671000+08:00
UTC:2016-09-1402:19:22.671000+00:00
JAPANTIME:2016-09-1411:19:22.671000+09:00

另外可以采用 replace來修改時區,時區多出6分鐘(不要使用)。具體原因為:

民國17年(1928年),國民政府統一中國,原中央觀象臺的業務由南京政府中央研究院的天文研究所和氣象研究所分別接收。天文研究所編寫的曆書基本上沿襲中央觀象臺的做法,仍將全國劃分為5個標準時區,只是在有關交氣、合朔、太陽出沒時刻等處,不再使用北平的地方平時,而改以南京所在的標準時區的區時即東經120°標準時替代。從北平地方平時改為東經120°標準時,兩者相差了352秒。

fromdatetimeimportdatetime
importpytz
now=datetime.now()
print(now)
tz=pytz.timezone('Asia/Shanghai')
print(now.replace(tzinfo=tz))

執行結果:

2016-09-1410:29:20.200000
2016-09-1410:29:20.200000+08:06

夏令時處理

由于用到的場景比較少,不做細化學習。

dateutil模塊

安裝模塊:pip install Python-dateutil

parser.parse()

解析時間到datetime格式,支持大部分時間字符串。沒指定時間默認是0點,沒指定日期默認是今天,沒指定年份默認是今年。

fromdateutilimportparser
print(parser.parse("8thMarch,2004"))
print(parser.parse("8March,2004"))
print(parser.parse("March8th,2004"))
print(parser.parse("March8,2004"))
print(parser.parse("2016-09-14"))
print(parser.parse("20160914"))
print(parser.parse("2016/09/14"))
print(parser.parse("09/14/2016"))
print(parser.parse("09,14"))
print(parser.parse("1200"))
print(parser.parse("Wed,Nov12"))

執行結果:

2004-03-0800:00:00
2004-03-0800:00:00
2004-03-0800:00:00
2004-03-0800:00:00
2016-09-1400:00:00
2016-09-1400:00:00
2016-09-1400:00:00
2016-09-1400:00:00
2016-09-0900:00:00
2016-09-1412:00:00
2016-11-1200:00:00

rrule.rrule()

函數主要功能:按照規則生成日期和時間。函數原型如下。

rrule(self, freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth=None, bymonthday=None, byyearday=None, byeaster=None, byweekno=None, byweekday=None, byhour=None, byminute=None, bysecond=None, cache=False)

其中:

  • freq:可以理解為單位。可以是 YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY。即年月日周時分秒。
  • dtstart,until:是開始和結束時間。
  • wkst:周開始時間。
  • interval:間隔。
  • count:指定生成多少個。
  • byxxx:指定匹配的周期。比如byweekday=(MO,TU)則只有周一周二的匹配。byweekday可以指定MO,TU,WE,TH,FR,SA,SU。即周一到周日。

更多參考:http://dateutil.readthedocs.io/en/stable/index.html

Arrow

Arrow 提供了一個友好而且非常易懂的方法,用于創建時間、計算時間、格式化時間,還可以對時間做轉化、提取、兼容 python datetime 類型。它包括dateutil模塊,根據其文檔描述Arrow旨在“幫助你使用更少的代碼來處理日期和時間”。

UTC 時間

使用utcnow()功能創建 UTC 時間。

使用to()方法,我們將 UTC 時間轉換為本地時間。

importarrow
utc=arrow.utcnow()
print(utc)
print(utc.to('local'))

當地時間

本地時間是特定區域或時區中的時間。

importarrow
now=arrow.now()
print(now)
print(now.to('UTC'))

使用now()功能創建本地時間。to()方法用于將本地時間轉換為 UTC 時間。

解析時間

get()方法用于解析時間。

importarrow
d1=arrow.get('2012-06-051603','YYYY-MM-DDHHss')
print(d1)
d2=arrow.get(1504384602)
print(d2)

該示例從日期和時間字符串以及時間戳解析時間。

Unix 時間戳

importarrow
utc=arrow.utcnow()
print(utc)
unix_time=utc.timestamp
print(unix_time)
date=arrow.Arrow.fromtimestamp(unix_time)
print(date)

該示例顯示本地時間和 Unix 時間。然后,它將 Unix 時間轉換回 date 對象。

使用fromtimestamp()方法,我們將 Unix 時間轉換回 Arrow 日期對象。

也可以將日期格式化為 Unix 時間。

importarrow
utc=arrow.utcnow()
print(utc.format('X'))

通過將’X’說明符傳遞給format()方法,我們將當前本地日期打印為 Unix 時間。

格式化日期和時間

日期和時間可以用format()方法格式化。

importarrow
now=arrow.now()
year=now.format('YYYY')
print("Year:{0}".format(year))
date=now.format('YYYY-MM-DD')
print("Date:{0}".format(date))
date_time=now.format('YYYY-MM-DDHHss')
print("Dateandtime:{0}".format(date_time))
date_time_zone=now.format('YYYY-MM-DDHHssZZ')
print("Dateandtimeandzone:{0}".format(date_time_zone))

格式說明:

c18a7206-2ac8-11ec-82a8-dac502259ad0.png

轉換為區域時間

importarrow
utc=arrow.utcnow()
print(utc.to('US/Pacific').format('HHss'))
print(utc.to('Europe/Bratislava').format('HHss'))
print(utc.to('Europe/Moscow').format('HHss'))

工作日

可以使用weekday()或format()方法找到日期的工作日。

importarrow
d1=arrow.get('1948-12-13')
print(d1.weekday())
print(d1.format('dddd'))

移動時間

shift()方法用于移動時間。

importarrow
now=arrow.now()
print(now.shift(hours=5).time())
print(now.shift(days=5).date())
print(now.shift(years=-8).date())

夏令時

importarrow
now=arrow.now()
print(now.format("YYYY-MM-DDHHssZZ"))
print(now.dst())

該示例使用dst()顯示夏令時。

人性化的日期和時間

在社交網站上,我們經常可以看到諸如“一個小時前”或“ 5 分鐘前”之類的術語,這些術語可以為人們提供有關帖子創建或修改時間的快速信息。Arrow 包含humanize()方法來創建此類術語。

importarrow
now=arrow.now()
d1=now.shift(minutes=-15).humanize()
print(d1)
d2=now.shift(hours=5).humanize()
print(d2)

ISO 8601類

國際標準ISO 8601,是國際標準化組織的日期和時間的表示方法,全稱為《數據存儲和交換形式·信息交換·日期和時間的表示方法》,在API接口開發中涉及的比較多。

>>>importdateutil.parser
>>>dateutil.parser.parse('2008-09-03T2035.450686Z')#RFC3339format
datetime.datetime(2008,9,3,20,56,35,450686,tzinfo=tzutc())
>>>dateutil.parser.parse('2008-09-03T2035.450686')#ISO8601extendedformat
datetime.datetime(2008,9,3,20,56,35,450686)
>>>dateutil.parser.parse('20080903T205635.450686')#ISO8601basicformat
datetime.datetime(2008,9,3,20,56,35,450686)
>>>dateutil.parser.parse('20080903')#ISO8601basicformat,dateonly
datetime.datetime(2008,9,3,0,0)

或者使用如下方式解析:

>>>datetime.datetime.strptime("2008-09-03T2035.450686Z","%Y-%m-%dT%H:%M:%S.%fZ")

另外還可以使用iso8601模塊

鏈接:https://www.biaodianfu.com/python-datetime.html

編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UNIX
    +關注

    關注

    0

    文章

    296

    瀏覽量

    41513
  • 計時器
    +關注

    關注

    1

    文章

    426

    瀏覽量

    32771
  • 函數
    +關注

    關注

    3

    文章

    4340

    瀏覽量

    62793
  • 共振
    +關注

    關注

    0

    文章

    28

    瀏覽量

    12801
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84850

原文標題:Python 處理日期與時間的全面總結

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-309:Blackfin處理器的電源模式轉換時間

    電子發燒友網站提供《EE-309:Blackfin處理器的電源模式轉換時間.pdf》資料免費下載
    發表于 01-06 14:25 ?0次下載
    EE-309:Blackfin<b class='flag-5'>處理</b>器的電源模式轉換<b class='flag-5'>時間</b>

    EE-308:估算和優化Blackfin處理器的啟動時間

    電子發燒友網站提供《EE-308:估算和優化Blackfin處理器的啟動時間.pdf》資料免費下載
    發表于 01-05 09:52 ?0次下載
    EE-308:估算和優化Blackfin<b class='flag-5'>處理</b>器的啟動<b class='flag-5'>時間</b>

    win系統批處顯示當時的時間日期

    win系統批處顯示當時的時間日期
    發表于 12-30 08:53

    IO模塊助力PLC,全面提升處理設備能效

    隨著我國環保事業的不斷發展,處理技術在工業、生活等領域發揮著越來越重要的作用。如何提高中水處理設備的能效,成為行業關注的焦點。本文將為您介紹明達技術高效解決方案——利用自主研發的分布式IO
    的頭像 發表于 12-16 14:57 ?127次閱讀
    IO<b class='flag-5'>模塊</b>助力PLC,<b class='flag-5'>全面</b>提升<b class='flag-5'>中</b>水<b class='flag-5'>處理</b>設備能效

    Python編程:處理網絡請求的代理技術

    在網絡編程,代理技術扮演著至關重要的角色,尤其在處理網絡請求時。通過代理服務器,我們可以實現請求的轉發、緩存、負載均衡以及安全控制等功能。Python作為一種功能強大的編程語言,為提供了豐富的工具和庫,以便敏捷地實現和
    的頭像 發表于 11-12 07:23 ?208次閱讀

    Java時間戳的使用

    Java時間戳的使用
    的頭像 發表于 11-06 16:04 ?238次閱讀
    Java<b class='flag-5'>中</b><b class='flag-5'>時間</b>戳的使用

    網絡時間服務器模塊:衛星時間同步的管理神器

    網絡時間服務器模塊是指網絡傳輸多個節點,如計算機服務器設備、控制裝置等之間時間和狀態具有相同的一致性。這一過程通過特定的技術手段實現。以確保不同設備之間的數據傳輸,在
    的頭像 發表于 08-20 15:38 ?311次閱讀
    網絡<b class='flag-5'>時間</b>服務器<b class='flag-5'>模塊</b>:衛星<b class='flag-5'>時間</b>同步的管理神器

    【「時間序列與機器學習」閱讀體驗】時間序列的信息提取

    本章主講時間序列的信息提取,章節中有許多概念定義和數學公式,并配有Python代碼演示,細細品讀與理解動手演練,還是很開拓思維視野的。下面以筆記形式進行展開。 時間序列的信息提取是時間
    發表于 08-17 21:12

    時間常數對暫態過程時間的影響有哪些

    時間常數(Time Constant)是電子學、控制理論和信號處理等領域中一個非常重要的概念。它描述了系統從初始狀態達到穩態所需的時間時間常數對暫態過程
    的頭像 發表于 07-26 09:24 ?2367次閱讀

    Python在AI的應用實例

    Python在人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python在AI
    的頭像 發表于 07-19 17:16 ?1229次閱讀

    使用Python進行自然語言處理

    在探討使用Python進行自然語言處理(NLP)的廣闊領域時,我們首先需要理解NLP的基本概念、其重要性、Python在NLP的優勢,以及如何通過
    的頭像 發表于 07-04 14:40 ?475次閱讀

    鴻蒙開發系統基礎能力:ohos.systemTime 設置系統時間

    模塊用來設置、獲取當前系統時間,設置、獲取當前系統日期和設置、獲取當前系統時區。
    的頭像 發表于 06-27 09:43 ?887次閱讀
    鴻蒙開發系統基礎能力:ohos.systemTime 設置系統<b class='flag-5'>時間</b>

    GTM模塊的TBU時間基準單元,這個時間基準是什么意思呢?

    1.請問各位大神GTM模塊的TBU時間基準單元,這個時間基準是什么意思呢?是指GTM從CMU得到系統時鐘之后通過TBU進行
    發表于 02-21 08:25

    感應電機的加速時間和失速時間

    ,希望能給讀者帶來全面的了解。 感應電機的加速時間指的是從靜止狀態到達額定轉速所需的時間。在電機運行過程,加速時間是非常重要的指標,它決定
    的頭像 發表于 02-01 14:44 ?1212次閱讀

    在Linux上如何通過命令行來更改日期時間

    是一些使用date命令進行日期時間更改的常見示例。 1. 顯示當前日期時間 要查看當前的日期時間
    的頭像 發表于 01-16 17:10 ?2896次閱讀
    主站蜘蛛池模板: 久久精品国产精品亚洲婷婷| 国产情侣露脸| 毛片爱做的片| 天堂伊人| 亚洲精品卡1卡二卡3卡四卡| 91日本视频| 操www| 国产伦精品一区二区三区免| 午夜久久影院| 香蕉视频久久久| 久久99精品久久久久久秒播| 色视频日本| 看片国产| 国产美女一级高清免费观看| 久久综合爱| 1024你懂的在线播放欧日韩| 日本天天操| 在线二区| 国语一区| 亚洲人成电影院在线观看| 最新色视频| 天堂资源在线www中文| 色香蕉视频| 免费观看黄a一级视频日本| 两性毛片| 亚洲高清日韩精品第一区| 久久婷婷丁香| 激情综合丁香| brazzersvideosex欧美高清| 天天网综合| 成人人免费夜夜视频观看| 丁香网五月天| 欲色视频| 免费级毛片| 亚洲第一免费播放区| 酒色网址| 能看毛片的网址| 手机在线色| 国产欧美视频在线| 国产精品毛片在线大全| 网色|