将列表中的日期和时间与日期时间元素分开

时间:2019-01-22 21:33:40

标签: python python-3.x

我在一个列表中包含一个列表,每个列表包含3个元素,其中之一是datetime。我需要修改列表,以将日期和时间分成各自的元素,然后将它们放回列表中。

样本输入:

[[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]

所需的输出:

[[2, 13, '2019-02-02', '07:00'], [7, 8, '2019-02-02', '09:00']] 

我可以使用下面的代码隔离时间或日期,但无法弄清楚如何获取两者:

from datetime import datetime

data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]

def convert_date(s):
    date_object = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')
    return date_object.strftime('%Y-%m-%d')

for idx,item in enumerate(data_set_x):
    data_set_x[idx][-1] = convert_date(item[2])

for i in data_set_x:
    sql = "insert into data (ValueA, ValueB, Date) values (%s,  %s, %s)"

    print(sql, i)

4 个答案:

答案 0 :(得分:1)

from datetime import datetime

data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]

def convert_date(s):
    date_object = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')
    return date_object.strftime('%Y-%m-%d'), date_object.strftime('%H:%M')

for idx,item in enumerate(data_set_x):
    data_set_x[idx][-1], time = convert_date(item[2])
    data_set_x[idx].append(time)

for i in data_set_x:
    sql = "insert into data (ValueA, ValueB, Date, Time) values (%s,  %s, %s, %s)"

    print(sql, i)

答案 1 :(得分:1)

如果输入和输出预期为字符串,则无需使用datetime,只会增加不必要的开销。

def break_date_time(s):
    d, t = s.split('T')
    t2 = ':'.join(t.split(':')[0:2])
    return [d, t2]

data_set_y = [x[0:2] + break_date_time(x[2]) for x in data_set_x]

答案 2 :(得分:0)

您可以尝试以下方法:

import datetime

for item in data_set_x:
    # remove last element
    dt_str = item.pop()

    # convert 'str' to 'datetime'
    dt_obj = datetime.datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%S')

    # append two 'str'
    item.append(dt_obj.strftime('%Y-%m-%d'))
    item.append(dt_obj.strftime('%H:%M'))

您可能需要调整新字符串的格式以适合您的用例。


您也可以将字符串用原始字符串中的T字符拆分(这比创建datetime对象要快),但是datetime对象可能会有所帮助您想要在日期或时间上指定与原始字符串不同的格式。

答案 3 :(得分:0)

您可以进行切片分配以编辑列表:

from datetime import datetime

data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]

for item in data_set_x:
    item_dt = datetime.strptime(item[2], '%Y-%m-%dT%H:%M:%S')
    item[2:3] = [item_dt.strftime('%Y-%m-%d'), item_dt.strftime('%H:%M')]

print(data_set_x)

输出:

[[2, 13, '2019-02-02', '07:00'], [7, 8, '2019-02-02', '09:00']]