我有一个字节数组->字节数组(b'\ x07 \ xe3 \ n \ n \ x04 \ n \ x0f \ x00 \ x00 \ x00 <\ x00')。
它代表日期和时间字段。我可以提取日期,但不能提取带有AM / PM详细信息的时间。如何确定要使用哪种格式的字符?
我正在将struct
库与unpack_from
方法一起使用。
import struct
byte_range = bytearray(b'\x07\xe3\n\n\x04\n\x0f\x00\x00\x00<\x00')
data = struct.unpack_from('!HBB',byte_range)
print(data)
我也希望从中获得一个小时,一分钟和几秒钟的数据以及AM / PM详细信息。解码的日期时间应为10/10/2019 1:15:00 PM
。
答案 0 :(得分:0)
日期时间元组的形状为(year, month, day, hour, minute, second, ...)
。
查看每个format character的大小,并了解日期时间的每个部分有多大,就可以找出所需的格式字符。
对于特定情况,您已经为日期选择了正确的格式字符:
B
是一个无符号字符,1个字节,值范围:0到255 H
是一个无符号的短2字节,值范围:0到65535 您会看到B
太小,无法存储年份值,这就是为什么需要H
的原因。
现在,您知道时间由3个数字组成,其值范围为0到60,因此B
是所有它们所需要的,最后以!HBBBBB
格式表示。 / p>
这是结果:
>>> import datetime
>>> import struct
>>> byte_range = bytearray(b'\x07\xe3\n\n\x04\n\x0f\x00\x00\x00<\x00')
>>> date_tuple = struct.unpack_from('!HBBBBB', byte_range)
>>> date = datetime.datetime(*date_tuple)
>>> date.strftime('%Y-%m-%d %H:%M %p')
'2019-10-10 04:10 AM'