代码之家  ›  专栏  ›  技术社区  ›  CDNthe2nd

python-将iso 8601转换为bst时间

  •  0
  • CDNthe2nd  · 技术社区  · 6 年前

    所以基本上我已经学习了一点ISO 8601的格式

    "2018-07-06T07:00:00.000"
    

    基本上,我所取得的成就是,我开始将ISO更改为更正式的时间戳,即:

    etatime = str(datetime.datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f"))
    

    其输出为:

    2018-07-06 07:00:00
    

    但是我注意到时间比英国时间晚了1小时,应该加上1小时。

    我的问题是,有没有可能从( 2018-07-06T07:00:00.000 )至( 2018-07-06 08:00:00 BST )?

    2 回复  |  直到 6 年前
        1
  •  1
  •   deceze    6 年前

    假设:输入表示一个UTC时间戳,您希望将其本地化为 伦敦 时间。您可能不希望将其本地化为BST时间,因为BST是格林威治标准时间的DST变体,而实际位置(如伦敦)将根据一年中的时间在BST和格林威治标准时间之间切换。您将要安装 pytz module .

    from datetime import datetime, timezone
    import pytz
    
    date = '2018-07-06T07:00:00.000'
    utc_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=timezone.utc)
    london_date = utc_date.astimezone(pytz.timezone('Europe/London'))
    
    datetime.datetime(2018, 7, 6, 8, 0, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>)
    

    strptime 给你一个 中殿 datetime 对象(没有时区信息) .replace 给你一个 意识到的 日期时间 对象(带有时区信息),它使您能够简单地将其转换为其他时区。

        2
  •  1
  •   Vasilis G.    6 年前

    一个建议是您可以使用 timedelta 函数来自 datetime 模块:

    from datetime import datetime, timedelta
    
    etatime = datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f")
    
    # Before adding one hour
    print(etatime)
    
    etatime = etatime + timedelta(hours=1)
    
    # After adding one hour
    print(etatime)
    

    输出:

    2018-07-06 07:00:00
    2018-07-06 08:00:00