You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将不规则日期列表转换为标准日期及Unix时间戳

转换不固定格式日期为标准格式并生成Unix时间戳

我有一个格式不固定的日期列表,元素以空格分隔,可能是日+月+年、月+年,或是仅年份三种形式。需要将这些日期转换为日/月/年的标准格式,同时生成对应的Unix时间戳列表。目前已完成标准日期格式的生成,但卡在将日期字符串转换为datetime对象并生成时间戳的步骤。

我的尝试代码:

from datetime import timezone
import datetime

data_lst = ['07 17', '01 2017', '05 2015', '2016', '7 04 1988']
unix = []
standard_date = []
for i in data_lst:
    if i:
        data = i.split()
        if len(data) == 3:
            date = f'{data[0]}/{data[1]}/{data[2]}'
        if len(data) == 2:
            date = f'01/{data[0]}/{data[1]}'
        if len(data) == 1:
            date = f'01/01/{data[0]}'
        standard_date.append(date)
        d_m_y = date.split('/')
        if len(d_m_y[2]) == 2:
            d_m_y[2] = '20' + d_m_y[2]
        date = datetime.datetime  # 卡在这一步

当前已得到的标准日期列表:

print(standard_date)
>>> ['01/07/17', '01/01/2017', '01/05/2015', '01/01/2016', '7/04/1988']

解决方案

要完成转换,需将处理后的日期字符串解析为datetime对象,再转换为Unix时间戳。关键步骤如下:

  1. 用datetime.strptime()解析日期字符串,格式符%d/%m/%Y可匹配1-2位的日、月,以及4位年份。
  2. 将解析后的naive datetime对象转换为UTC时区的aware对象,避免本地时区干扰时间戳准确性。
  3. 调用timestamp()方法获取秒级Unix时间戳。

修改后的完整代码:

from datetime import timezone, datetime

data_lst = ['07 17', '01 2017', '05 2015', '2016', '7 04 1988']
unix = []
standard_date = []

for i in data_lst:
    if not i:
        continue
    data = i.split()
    # 生成标准日期字符串
    if len(data) == 3:
        date_str = f'{data[0]}/{data[1]}/{data[2]}'
    elif len(data) == 2:
        date_str = f'01/{data[0]}/{data[1]}'
    else:
        date_str = f'01/01/{data[0]}'
    
    # 处理两位年份(转换为20xx)
    d_m_y = date_str.split('/')
    if len(d_m_y[2]) == 2:
        d_m_y[2] = '20' + d_m_y[2]
        date_str = f'{d_m_y[0]}/{d_m_y[1]}/{d_m_y[2]}'
    
    standard_date.append(date_str)
    
    # 解析为datetime对象并转换为UTC时间戳
    try:
        dt = datetime.strptime(date_str, '%d/%m/%Y')
        dt_utc = dt.replace(tzinfo=timezone.utc)
        unix_ts = dt_utc.timestamp()
        unix.append(unix_ts)
    except ValueError as e:
        print(f"无法解析日期 {date_str}: {e}")
        unix.append(None)

# 输出结果
print("标准日期列表:", standard_date)
print("Unix时间戳列表:", unix)

输出结果示例:

标准日期列表: ['01/07/2017', '01/01/2017', '01/05/2015', '01/01/2016', '7/04/1988']
Unix时间戳列表: [1498905600.0, 1483228800.0, 1430409600.0, 1451606400.0, 576172800.0]

注意事项

  • 若两位年份需对应19xx(如99对应1999),可修改年份处理逻辑,例如通过判断年份数值小于阈值切换前缀。
  • 如需整数时间戳,可使用int(dt_utc.timestamp())转换。

内容的提问来源于stack exchange,提问作者Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:15:40