python:从带有额外字符的日期时间字符串计算秒数

时间:2018-02-08 06:55:43

标签: python datetime

我想创建一个新列,其中包含自1970年以来针对以下输入文件的每一行的秒数:

composer dump-autoloader

第一列代表时间戳,但它包含额外的字符' T'和' Z'。我目前的代码如下:

timestamp, air_temp, rh, pressure, dir, spd
2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80
2016-11-30T01:00:00Z,-35.70,55.80,624.70,265.00,5.90
2016-11-30T02:00:00Z,-34.80,56.00,625.00,266.00,6.30

这回报了我想要的东西但输入文件很大需要很长时间。如果时间戳没有这些额外的字符,我会直接使用它而不是计算年,月,日和小时。有没有更好的办法?任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:3)

而不是使用字符串切片。为什么不用逗号分隔字符串?并在datetime模块中使用 strptime 方法将字符串datetime转换为datetime对象。

示例

import datetime

with open(path, "r") as infile:
    for i in infile.readlines()[1:]:
        dVal = i.strip().split(",")[0]
        print (datetime.datetime.strptime(dVal, '%Y-%m-%dT%H:%M:%SZ')-datetime.datetime(1970, 1, 1)).total_seconds()

<强>输出:

1480464000.0
1480467600.0
1480471200.0

答案 1 :(得分:2)

输入:

import datetime as dt

line = '2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80'

# We know the datetime data is always 20 characters long
line_dt_str = line[:20]
line_secs_since_epoch = dt.datetime.strptime(line_dt_str, '%Y-%m-%dT%H:%M:%SZ').timestamp()
print(line_secs_since_epoch)

输出:

1480482000.0

请注意,调用.timestamp()和从1970年代减去日期时间之间存在差异。这来自于这两种方法如何处理(或不处理)夏令时。阅读更多here

答案 2 :(得分:0)

您可以首先在,上的文件中拆分并将其转换为datetime对象

来实现此目的
>>> import datetime

>>> line = '2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80'
>>> t = datetime.strptime(line.split(',')[0], '%Y-%m-%dT%H:%M:%SZ')

要转换为秒,您只需使用:

>>> int(t.strftime("%s"))
>>> 1480435200