将yyyymmdd转换为序列号python

2024-09-30 06:21:25 发布

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

如何将格式为yyyymmdd的日期列表转换为序列号?例如,如果我有这个日期列表:

t = [1898-10-12 06:00,1898-10-12 12:00,1932-09-30 08:00,1932-09-30 00:00]

如何将每个日期转换为序列号?我目前正在使用datetime toordinal()命令,但是每个日期都被舍入为相同的序列号。我怎样才能把相同的日期和不同的时间变成不同的数字呢?你知道吗

列表中的时间是日期时间。日期时间数字。我试着做:

thurser = []
for i in range(len(t)):
    thurser.append(t[i].toordinal())

但我没有把序列号当成浮点数。你知道吗


Tags: in命令列表fordatetimelen格式时间
2条回答

如果我的理解有误,请告诉我,我尝试了以下操作,并为列表中的每个值给出了不同的数字。
我修改了
t = ['1898-10-12 06:00','1898-10-12 12:00','1932-09-30 08:00','1932-09-30 00:00']
使用
t = [datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0), datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
正如评论中提到的,它是日期时间。日期时间.
我正在考虑从给定日期开始的总毫秒数来生成一个数字。
所以在上述日期之前的日期会给出负值。但是不同的价值观。你知道吗

t = [datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0), datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
thurser = []
x = []
for i in range(len(t)):
    thurser.append(t[i].toordinal())
    x.append((t[i]-datetime.datetime.utcfromtimestamp(0)).total_seconds() * 1000.0)

print(thurser)
print(x)

输出:

[693150, 693150, 705556, 705556]
[-2247501600000.0, -2247480000000.0, -1175616000000.0, -1175644800000.0]

^{}只考虑datetime对象的'date'部分,而不考虑时间。^{}也一样-它只有一个日期部分。列表中的前2个和后2个元素的datetimes在同一个日期但在不同的时间,而.toordinal会忽略这些。因此,.toordinal将为这些日期相同的日期时间提供相同的值。你知道吗

一般来说,解决方法是计算日期与预先确定/固定日期之间的差值。我使用的是datetime.datetime(1, 1, 1),最早的datetime,所以所有的delta都是正值:

thurser = []
# assuming t is a list of datetime objects
for d in t:
    delta = d - datetime.datetime(1, 1, 1)
    thurser.append(delta.days + delta.seconds/(24 * 3600))

>>> print(thurser)
[693149.25, 693149.5, 705555.3333333334, 705555.0]

如果你喜欢整数而不是浮点数,那么用秒代替天:

thurser.append(int(delta.total_seconds()))  # total_seconds has microseconds in the float

>>> print(thurser)
[59888095200, 59888116800, 60959980800, 60959952000]

在第二个示例中,要恢复原始值:

>>> [datetime.timedelta(seconds=d) + datetime.datetime(1, 1, 1) for d in thurser]
[datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0),
 datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
>>> _ == t  # compare with original values
True

相关问题 更多 >

    热门问题