将yyyymmdd转换为序列号python

时间:2019-02-27 22:33:44

标签: python datetime

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

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

如何将每个日期转换为序列号?我目前正在使用datetime toordinal()命令,但是每个日期都被四舍五入为相同的序列号。如何将不同时间的相同日期设为不同的数字?

列表中的时间是datetime.datetime数字。我尝试过然后做:

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

但是我不会以浮点数的形式获取序列号。

2 个答案:

答案 0 :(得分:0)

如果我的理解有误,请告诉我,我尝试了以下操作,并为列表的每个值提供了不同的数字。
我修改了
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)]
如评论中所述,它是datetime.datetime的列表。
我正在考虑从给定日期1970-01-01 00:00:00起总计MilliSeconds以生成数字。
因此,高于该日期的日期将给出负值。但价值不同。

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]

答案 1 :(得分:0)

datetime.toordinal()仅考虑datetime对象的'date'部分,而不考虑时间。 date.toordinal()也是如此-它仅包含日期部分。列表中的前2个元素和后2个元素的日期时间在同一日期,但时间不同,.toordinal会忽略它们。因此,.toordinal将为您提供相同的日期时间值。

通常,解决方案是计算您的日期与一个预定/固定日期之间的差额。我正在使用datetime.datetime(1, 1, 1),这是最早的日期时间,所以所有增量都是正值:

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