首页 文章

在python中将本地化字符串日期表示转换为UTC

提问于
浏览
1

如何将以下本地化日期时间字符串转换为UTC日期时间 . 该字符串包含其中提到的日期,时间和时区,例如 May 15,2015, 04.24AM IST ,这里IST是印度标准时间 . 它可以是任何时区 . 我尝试使用pytz,但无法使其工作 .

2 回答

  • 2

    事情是它's quite difficult to parse a string with an abbreviated timezone information. But, if you know your timezone, then you can look up it'的名字被 pytz 认可 . 您甚至可以使用 pytz.all_timezones 列出所有时区名称 .

    在你的情况下,它是'亚洲/加尔各答',这应该可以将其转换为UTC . 只需从字符串中删除时区信息,然后再添加:

    import pytz
    import datetime
    
    # String without timezone info
    str = "May 15, 2015, 04.24AM"
    # Parse it to naive time
    dt = datetime.datetime.strptime(str, "%b %d, %Y, %I.%M%p")
    # Localize it as Asia/Calcutta
    dt_localized = pytz.timezone('Asia/Calcutta').localize(dt)
    # Convert it to UTC
    dt_utc = dt_localized.astimezone(pytz.timezone('UTC'))
    

    我们得到:

    >>> dt
    datetime.datetime(2015, 5, 15, 4, 24)
    
    >>> dt_localized
    datetime.datetime(2015, 5, 15, 4, 24, tzinfo=<DstTzInfo 'Asia/Calcutta' IST+5:30:00 STD>)
    
    >>> dt_utc
    datetime.datetime(2015, 5, 14, 22, 54, tzinfo=<UTC>)
    
  • 1

    首先,让我们删除IST时区的日期字符串,然后将其分配给亚洲/加尔各答时区 .

    import pytz
    
    dt_str = "May 15, 2015, 04.24AM IST"
    dt_str_naive = dt_str[:-4]
    
    new_dt = (pytz.timezone('Asia/Calcutta')
              .localize(dt.datetime.strptime(dt_str_naive, "%b %d, %Y, %I.%M%p")))
    

    现在它可以识别时区,您可以将其分配给UTC时区:

    >>> new_dt.astimezone(pytz.UTC)
    datetime.datetime(2015, 5, 14, 22, 54, tzinfo=<UTC>)
    

相关问题