python将PST时间转换为UTC isoformat

21 浏览
0 Comments

python将PST时间转换为UTC isoformat

我有一个日期字符串

2018-02-17 16:15:36.519 PST

我想将其转换为如下的UTC格式

2018-02-18T00:15:36.519Z

我尝试了以下方法

from dateutil.parser import parse
d1='2018-02-17 16:15:36.519 PST'
print parse(d1)
它打印出如下结果。我该如何将其转换为以Z结尾的UTC格式。
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进行格式化。

0
0 Comments

这段代码是一个Python 2.7的示例,用于将PST时间转换为UTC时间的ISO格式。下面是代码的功能解释和解决方法。

问题出现的原因:

这段代码的目的是获取当前时间,并将其转换为PST(太平洋标准时间)和UTC(协调世界时)时间。它还提供了将给定的PST时间和UTC时间相互转换的功能。

解决方法:

1. 首先,通过使用datetime模块中的datetime类和pytz模块中的utc和timezone函数,定义了一个名为get_current_pst_time的函数。该函数获取当前时间,并将其转换为本地时间、UTC时间和PST时间,并打印出来。

2. 其次,定义了一个名为convert_pst_time_to_utc_time的函数,用于将给定的PST时间字符串转换为UTC时间。它使用datetime模块中的strptime函数将字符串解析为datetime对象,然后使用pytz模块中的timezone函数将其转换为PST时间。最后,将PST时间转换为UTC时间,并打印出来。

3. 最后,定义了一个名为convert_utc_time_to_pst_time的函数,用于将给定的UTC时间字符串转换为PST时间。它使用datetime模块中的strptime函数将字符串解析为datetime对象,然后使用pytz模块中的timezone函数将其转换为UTC时间。最后,将UTC时间转换为PST时间,并打印出来。

这段代码提供了一种方便的方法来处理PST时间和UTC时间之间的转换。通过使用datetime模块和pytz模块,可以轻松地将时间字符串转换为datetime对象,并将其转换为不同的时区。这对于处理跨时区的时间数据非常有用。

0
0 Comments

问题的出现原因是需要将一个带有时区缩写(PST)的时间字符串转换为带有时区的datetime对象,并将其转换为UTC时间并按照ISO格式输出。解决方法是使用dateparser库来解析时间字符串并创建时区感知的datetime对象,然后使用astimezone()方法将其转换为UTC时间,最后使用isoformat()方法或strftime()方法将其按照所需格式输出。

以下是完整的文章:

Python中将PST时间转换为UTC isoformat的方法

要解析带有时区缩写(PST)的时间字符串并创建时区感知的datetime对象:

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=)

要将时间转换为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?](https://stackoverflow.com/q/1703546/4279)

在您的特定情况下,时间字符串对应唯一的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: # 相同的时区缩写
        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')

参考[linux convert time(for different timezones) to UTC](https://stackoverflow.com/q/13707545/4279)

如果使用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

注意:dateparser库支持Python 2.7。已使用Python 2.7变体更新了答案。

0