python将PST时间转换为UTC isoformat
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进行格式化。
这段代码是一个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对象,并将其转换为不同的时区。这对于处理跨时区的时间数据非常有用。
问题的出现原因是需要将一个带有时区缩写(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变体更新了答案。