python日期转换

获取当前系统时间戳

1
int(round(time.time() * 1000))

时间戳转换为ISO 8601

输入一个时间戳 中国标准时间2019年9月1日上午8时 1567296000000 输出 ISO Date

1
2
3
4
5
6
7
8
9
10
import datetime,timezone,timedelta
TS = 1567296000000

print(datetime.fromtimestamp(TS/1000)) # 时间戳会被转换为所在平台的本地日期和时间,是简单型 datetime 对象

print(datetime.fromtimestamp(TS/1000, tz=timezone.utc)) # 时区UTC+0:00
DATE_TZ_CN = datetime.fromtimestamp(TS/1000, tz=timezone.utc).astimezone(timezone(timedelta(hours=8)))

print(DATE_TZ_CN) # 2019-09-01 08:00:00+08:00 # <class 'datetime.datetime'>
print(DATE_TZ_CN.isoformat()) # 2019-09-01T08:00:00+08:00 # isoformat() 后会转换格式 <class 'str'>
1
2
3
4
5
# 输出
2019-09-01 08:00:00
2019-09-01 00:00:00+00:00
2019-09-01 08:00:00+08:00
2019-09-01T08:00:00+08:00

ISO datetime 转换 millisecond 时间戳

简单型 datetime 对象 使用系统时区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import time
from datetime import datetime
dt = "2016-05-05 20:28:54"

print(dt)
# 2016-05-05 20:28:54
ts = time.mktime(time.strptime(dt,"%Y-%m-%d %H:%M:%S"))
print(ts,type(ts))
# 1462451334.0 <class 'float'>
ts = round(int(ts*1000))
print(ts,type(ts))
# 1462451334000 <class 'int'>

print(datetime.fromtimestamp(ts/1000))
# 2016-05-05 20:28:54

参考

wiki - 国际标准ISO 8601

日期和时间的组合表示法

合并表示时,要在时间前面加一大写字母T,如要表示东八区时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:0020040503T173008+08

python3 doc - datetime — Basic date and time types

警告

由于简单型 datetime 对象会被许多 datetime 方法当作本地时间来处理,最好是使用感知型日期时间对象来表示 UTC 时间。 因此,创建表示当前 UTC 时间的对象的推荐方式是通过调用 datetime.now(timezone.utc)

廖雪峰的官方网站 获取当前日期和时间

时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。

利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

datetime.``isoformat(sep=’T’, timespec=’auto’)

1
2
3
>>> from datetime import datetime, timezone
>>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
'2019-05-18T15:17:08.132263'
作者

Wei Mo

发布于

2022-03-11

更新于

2023-11-20

许可协议

评论