您是否在为时间管理而苦恼?本文可以解决你以下问题:Python获取北京时间Python获取北京时间字符串Python获取UTC时间Python获取UTC时间字符串获取str类型的当前时间关于offset-naive和offset-aware的区别offset-naive是没有时区的类型,offset-aware是有时区的类型。可以参考:避坑手册!Python比较两个datetime大小的坑收到一个naivedatetimewhiletimezonesupportisactive如果你只是想以最简单的方式得到一个iso-8601格式的时间字符串,使用下面的代码:iso-8601格式:2022-04-2110:38:23.307791+08:00offset-naive无时区信息UTC时间和北京时间显示fromdatetimeimportdatetime#UTC时区时间,offset-naive无时区信息print(datetime.utcnow().strftime('%Y-%m-%d%H:%M:%S'))#不包含毫秒print(datetime.utcnow().strftime('%Y-%m-%d%H:%M:%S.%f'))#包含毫秒#北京时间,offset-naive没有时区信息print(datetime.now().strftime('%Y-%m-%d%H:%M:%S'))#不包含毫秒print(datetime.now().strftime('%Y-%m-%d%H:%M:%S.%f'))#包含毫秒输出结果:2022-04-0709:54:172022-04-0709:54:17.7436262022-04-0717:56:072022-04-0717:56:07.753445可以看到北京时间比UTC时间多8小时。offset-awarewithtimezoneInformationUTC时间和北京时间显示fromdatetimeimportdatetime,timedelta,timezone#UTC时区时间,offset-awarewithtimezoneinformationprint(datetime.utcnow().replace(tzinfo=timezone.utc).strftime('%Y-%m-%d%H:%M:%S'))#不包含毫秒并且不包括时区print(datetime.utcnow().replace(tzinfo=timezone.utc).strftime('%Y-%m-%d%H:%M:%S%z'))#不包括毫秒但包括时区print(datetime.utcnow().replace(tzinfo=timezone.utc).strftime('%Y-%m-%d%H:%M:%S.%f%z'))#包括毫秒和时区#北京时间,偏移感知时区信息print(datetime.now().replace(tzinfo=timezone(timedelta(hours=8))).strftime('%Y-%m-%d%H:%M:%S'))#没有毫秒和时区print(datetime.now().replace(tzinfo=timezone(timedelta(hours=8))).strftime('%Y-%m-%d%H:%M:%S%z'))#不包括毫秒但包括时区print(datetime.now().replace(tzinfo=timezone(timedelta(hours=8))).strftime('%Y-%m-%d%H:%M:%S.%f%z'))#包含毫秒,包含时区输出结果:2022-04-0710:14:562022-04-0710:14:56+00002022-04-0710:14:56.441156+00002022-04-0718:14:562022-04-0718:14:56+08002022-04-0718:14:56.441175+0800获取datetime类型的当前时间fromdatetimeimportdatetime,timedelta,timezoneprint(datetime.utcnow())#utctimewithouttimezoneinformationprint(datetime.utcnow().replace(tzinfo=timezone.utc))#带时区信息的utc时间print(datetime.now())#不带时区信息的北京时间print(datetime.now().replace(tzinfo=timezone(timedelta(hours=8))))#带有时区信息的UTC时间输出:2022-04-0710:21:07.6118892022-04-0710:21:07.613313+00:002022-04-0718:21:07.6133222022-04-0718:21:07.613326+08:00str字符串转datetime,推荐一个通用的解析方法:pydantic这个库实现了parse_datetime,可以把各种乱七八糟的时间格式字符串解析成datetime类型,比如带毫秒,带时区frompydantic.datetime_parseimportparse_datetimefromdatetimeimportdatetime,timedelta,timezoneprint(parse_datetime('2022-04-0710:11:13'))print(parse_datetime('2022-04-0710:11:13+0000'))print(parse_datetime('2022-04-0710:11:13.749788+0000'))print(parse_datetime('2022-04-0710:11:13.749788+0000').tzinfo)print(parse_datetime('2022-04-0710:11:13.749788+0800'))打印(parse_datetime('2022-04-0710:11:13.749788+0800').tzinfo)输出结果:2022-04-0710:11:132022-04-0710:11:13+00:002022-04-0710:11:13.749788+00:00UTC2022-04-0710:11:13.749788+08:00UTC+08:00将datetime类型转换为str字符串,直接调用str()函数。如果需要精确控制,使用strftime方法
