python将PST时间转换为UTC isoformat

标签 python date parsing

前任:
我有一个日期字符串

2018-02-17 16:15:36.519 PST

我如何在 UTC 中转换为 isoformat,如下所示
2018-02-18T00:15:36.519Z

我试过这个
from dateutil.parser import parse
d1='2018-02-17 16:15:36.519 PST'
print parse(d1)
it prints like this.  How do i convert it to UTC with Z at the end.
2018-02-17 16:15:36.519000-08:00

编辑
使用 python 2.7。
import dateutil
import pytz
from dateutil.parser import parse
d1='2018-02-17 16:15:36.519 PST'
d2=dateutil.parser.parse(d1)
d2.replace(tzinfo=pytz.utc) - d2.utcoffset()
d3=(d2.replace(tzinfo=pytz.utc) - d2.utcoffset()).isoformat()
print d3

然后按照建议使用 Z 进行格式化

最佳答案

要将具有时区缩写 ( PST ) 的时间字符串解析为时区感知日期时间对象:

import dateparser  # pip install dateparser

pst_dt = dateparser.parse('2018-02-17 16:15:36.519 PST')
# -> datetime.datetime(2018, 2, 17, 16, 15, 36, 519000, tzinfo=<StaticTzInfo 'PST'>)

要将时间转换为 UTC 时区:
import datetime as DT

utc_dt = pst_dt.astimezone(DT.timezone.utc)
# -> datetime.datetime(2018, 2, 18, 0, 15, 36, 519000, tzinfo=datetime.timezone.utc)

要以所需格式打印它:
print(utc_dt.isoformat())  # -> 2018-02-18T00:15:36.519000+00:00
print(utc_dt.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))  # -> 2018-02-18T00:15:36.519000Z

在 Python 2.7 上没有 DT.timezone.utc :
utc_naive = psd_dt.replace(tzinfo=None) - psd_dt.utcoffset()
print utc_naive.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
# -> 2018-02-18T00:15:36.519000Z

注意:在一般情况下,时区缩写(例如 PST )可能不明确。见Parsing date/time string with timezone abbreviated name in Python?

在您的特定情况下,时间字符串对应于唯一的 UTC 时间:
>>> from collections import defaultdict
>>> import datetime as DT
>>> import pytz
>>> naive_dt, tzabbr = DT.datetime(2018, 2, 17, 16, 15, 36, 519000), 'PST'
>>> utc_times = defaultdict(list)
>>> for zone in pytz.all_timezones:
...     dt = pytz.timezone(zone).localize(naive_dt, is_dst=None)
...     if dt.tzname() == tzabbr: # same timezone abbreviation
...         utc_times[dt.astimezone(pytz.utc)].append(zone)
>>> for utc_dt, timezones in utc_times.items():
...     print(f'{utc_dt:%c %Z}', *timezones, sep='\n\t')
Sun Feb 18 00:15:36 2018 UTC
        America/Dawson
        America/Ensenada
        America/Los_Angeles
        America/Santa_Isabel
        America/Tijuana
        America/Vancouver
        America/Whitehorse
        Canada/Pacific
        Canada/Yukon
        Mexico/BajaNorte
        PST8PDT
        US/Pacific
        US/Pacific-New

linux convert time(for different timezones) to UTC

关于python将PST时间转换为UTC isoformat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848628/

相关文章:

c# - 在 C# 中使用日期对字符串列表进行排序

javascript - 解析php字符串中的多个值

html - 您如何解析网页并提取所有 href 链接?

python - json.loads() 中的无效\转义,python 2.7

python - 是否可以在进程之间传递 Python Future 对象?

Python:对列的子部分进行排序

php - 数据库活在过去?

java - 如何使用 Java 和 SAX 解析带有偶尔 XML 标记的纯文本文件?

python - 如何突出显示时间序列线图的周末

python - 为什么这个函数在一些更大的变量值上得到错误的结果