<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
datetime有四個主要的模組:
# 從 datetime 中匯入 datetime 模組。 from datetime import datetime utc_time = datetime.utcnow() # utcnow()獲取世界標準時間。 print(f'1、UTC時間為:{utc_time}') local_time = datetime.now() # now() 獲取本地時間。 print(f'1、本地時間為:{local_time}')
執行結果為:
1、UTC時間為:2019-06-26 10:58:24.730439
1、本地時間為:2019-06-26 18:58:24.730439
可以看出本地時間早於UTC世界標準時間8小時。
利用 timezone() 可以設定時區物件,裡面引數可由 和 timedelta() 提供。
timedelta() 是用來實現對日期的加減。
引數如下:
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
從建構函式的定義中可以看出,所有引數都是可選的,並且預設都是0。
from datetime import timezone, timedelta beijing = timezone(timedelta(hours=8)) print(f'1、北京時區為:{beijing}') Tokyo = timezone(timedelta(hours=9)) print(f'2、東京時區為:{Tokyo}') New_York = timezone(timedelta(hours=-4)) print(f'3、紐約時區為:{New_York}') utc = timezone.utc print(f'4、世界標準時區為:{utc}')
執行結果為:
1、北京時區為:UTC+08:00
2、東京時區為:UTC+09:00
3、紐約時區為:UTC-04:00
4、世界標準時區為:UTC
可以看出定義的時區都是在 UTC時區 基礎上進行的 加或減 操作。
1)下面是 錯誤示範:
utc_time = datetime.utcnow() print(f'UTC時間為:{utc_time}') print(f'本地時間為:{datetime.now()}') time_beijing = utc_time.astimezone(beijing) time_tokyo = utc_time.astimezone(Tokyo) time_newyork = utc_time.astimezone(New_York) print('1、更改時區為北京後的時間:', time_beijing) print('2、更改時區為東京後的時間:', time_tokyo) print('3、更改時區為紐約後的時間:', time_newyork)
執行結果如下:
UTC時間為:2019-06-26 11:55:18.150625
本地時間為:2019-06-26 19:55:18.150625
1、更改時區為北京後的時間: 2019-06-26 11:55:18.150625+08:00 # 後面的 +08:00 只是顯示時區,
# 這裡表示的時間就是 11 點,而不是加了 8 後的 19 點。
2、更改時區為東京後的時間: 2019-06-26 12:55:18.150625+09:00 # 東京時間早於北京時間1小時。
3、更改時區為紐約後的時間: 2019-06-25 23:55:18.150625-04:00 # 紐約時間晚於北京時間12小時。
可以看出執行結果的 北京時間 和 本地時間 差了 8 小時 和 UTC 時間 是一樣的。說明這樣的時區調整結果是不對的。
正常情況,北京時間 應該和 本地時間 一樣。
# 用 tzinfo 檢視 utc_time 時區屬性
print(utc_time.tzinfo)
結果為:None。可知上面日期錯誤的原因是:
用 astimezone() 對 utc_time 的時區屬性進行修改時,因為utc_time的時區屬性為None,所以模組會把 utc_time 的時區預設為本地時區。
因為本地時區就是 UTC+08:00,所以當用 time_beijing = utc_time.astimezone(beijing) 進行修改時,時區是不會改動仍是 2019-06-26 11:55:18.150625 只是後面加了 +08:00。
用 time_tokyo = utc_time.astimezone(Tokyo) 進行修改時,會先把時區變成 UTC 時間 :2019-06-26 3:55:18.150625+00:00, 再加上東京的時區,變為:2019-06-26 12:55:18.150625+09:00。
2)、正確的時區轉換
先把 utc_time 利用 replace(tzinfo=時區物件) 強制更改 時區屬性:
utc_time = datetime.utcnow() # 獲取當前 UTC 時間 print(f'UTC時間為:{utc_time}') local_time = datetime.now() # 獲取當前本地時間 print(f'本地時間為:{local_time}') utc = timezone.utc # 獲取 UTC 的時區物件 utc_time = datetime.utcnow().replace(tzinfo=utc) # 強制轉換加上 UTC 時區。此處敲黑板,需要特別注意。 # replace的tzinfo引數為時區物件,所以 # 也可以這樣 replace(tzinfo=timezone(timedelta(hours=0)) print(f'1、強制更改後的UTC時間為:{utc_time}') time_beijing = utc_time.astimezone(beijing) time_newyork = utc_time.astimezone(New_York) time_tokyo = utc_time.astimezone(Tokyo) print('2、更改時區為北京後的時間:', time_beijing) print('3、獲取時區資訊:', time_beijing.tzinfo) print('4、更改時區為東京後的時間:', time_tokyo) print('5、獲取時區資訊:', time_tokyo.tzinfo) print('6、更改時區為紐約後的時間:', time_newyork) print('7、獲取時區資訊:', time_newyork.tzinfo)
執行結果為:
UTC時間為:2019-06-26 12:29:10.178907
本地時間為:2019-06-26 20:29:10.178907
1、強制更改後的UTC時間為:2019-06-26 12:29:10.178907+00:00 # 這裡為上面的UTC時間加上了 +00:00
2、更改時區為北京後的時間: 2019-06-26 20:29:10.178907+08:00 # 此時的北京時間就和上面的本地時間一樣了。
3、獲取時區資訊: UTC+08:00
4、更改時區為東京後的時間: 2019-06-26 21:29:10.178907+09:00 # 東京時間比北京時間早1小時,也正常。
5、獲取時區資訊: UTC+09:00
6、更改時區為紐約後的時間: 2019-06-26 08:29:10.178907-04:00 # 紐約時間比UTC時間晚4小時,也是正常的。
7、獲取時區資訊: UTC-04:00
注:astimezone()修改 時區 會對應的調整日期和時間。
replace(tzinfo=時區) 只是修改時區屬性,不會修改日期和時間。
此時如果 用 timestamp() 把日期轉換為時間戳,那麼它們三個的時間戳應該都一樣的,即:
time_beijing.timestamp() == time_tokyo.timestamp() == time_newyork.timestamp()
因為這三個時間只是不同時區的表示方法,對應的都是當時的那一刻時間。
python2.7的datetime包沒有timezone類,用第三方包解決
pip install pytz import pytz from datetime import datetime u = datetime.utcnow() u = u.replace(tzinfo=pytz.utc) #NOTE: it works only with a fixed utc offset print(u) # prints UTC time >>> '2020-10-23 06:33:19+00:00' print(u.astimezone(pytz.timezone("America/New_York"))) # prints another timezone >>> '2020-10-23 02:33:19-04:00' t = datetime.now(tz=pytz.timezone('Asia/Shanghai') print(t) >>> '2020-10-23 14:33:19+08:00' print(t.astimezone(pytz.timezone("America/New_York"))) >>> '2020-10-23 02:33:19-04:00' t = datetime.now() print(t) >>> '2020-10-23 14:33:19' print(t.astimezone(pytz.timezone("America/New_York"))) >>> ValueError: astimezone() cannot be applied to a naive datetime
datetime.replace(tzinfo=tz)
將timezone資訊賦給datetime,而不改變日期的值,datetime從一個無時區的狀態變成有時區的狀態datetime.astimezone(tzinfo=tz)
時區轉換,datetine轉換成新時區的值,執行此方法的datetime必須宣告過timezone,否則會報cannot apply to a naive datetimepython3.2之後的datetime包引入了timezone的類
from datetime import datetime, timedelta, timezone u = datetime.utcnow() u = u.replace(tzinfo=timezone.utc) #NOTE: it works only with a fixed utc offset print(u) # prints UTC time >>> '2020-10-23 06:33:19+00:00' print(u.astimezone(timezone(timedelta(hours=-4), "America/New_York"))) # prints another timezone >>> '2020-10-23 02:33:19-04:00'
datetime.timezone(offset, name=None)¶
offset是timedelta物件,取值限制在 -timedelta(hours=24) and timedelta(hours=24)之間
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45