获取此格式的日期时间并在python中转换为十六进制

2024-04-25 15:57:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

import datetime

time_stamp = datetime.datetime.utcnow()
print(time_stamp)

这将返回以下内容:

2021-04-16 11:06:16.867390

我想将整个时间戳,包括微秒(即全部6位小数)转换为唯一的十六进制数。我如何才能做到这一点(如果有,最好是一行)

类似的解决方案如下:Getting a datetime in this format and converting to 4 byte hex。但是,它们不包括utcnow()返回函数的小数部分,在这种情况下,这一部分很重要,因为预期它会为每微秒的更改创建一个不同的十六进制


Tags: and代码inimportformatdatetimetimestamp
2条回答

这似乎是一个解决方案:

import datetime

time_stamp = datetime.datetime.utcnow().strftime('%Y%m%d%H%M%S%f')
print(time_stamp)

time_stamp_hex = hex(int(time_stamp))
print(time_stamp_hex)

结果是:

20210416114300753898 # <- numeric
0x11879d26067ba17ea  # <- hex

如果您不介意再花费几个字节,那么使用ISO 8601格式的字符串是一个不错的选择,因为它易于阅读并清楚如何解释:

# encode datetime:
bts = bytes(dtobj.isoformat(timespec='microseconds'), 'ASCII') # 32 bytes

# decode datetime:
print(datetime.fromisoformat(bts.decode('ASCII')))
# 2020-01-01 00:00:00+00:00

您也可以改用Unix时间(如您链接的问题所示),它只需要8个字节:

from datetime import datetime, timezone
import struct

dtobj = datetime(2020,1,1,tzinfo=timezone.utc)

# to seconds since the epoch / unix time (float)
ts = dtobj.timestamp()

# 64bit float to bytes
bts = struct.pack('!d', ts)

# hex repr
print(' '.join(f"x{b:02X}" for b  in bts))
# x41 xD7 x82 xF8 x40 x00 x00 x00

# unpack and back to datetime obj
print(datetime.fromtimestamp(struct.unpack('!d', bts)[0], timezone.utc))
# 2020-01-01 00:00:00+00:00

旁注:don't use utcnow使用此方法

相关问题 更多 >