当前位置: 首页 > 知识库问答 >
问题:

python将PST时间转换为UTC isoformat

齐宗清
2023-03-14

我有一个日期字符串

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

使用Python2.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格式化

共有2个答案

闻人哲茂
2023-03-14

这是来自python2.7的演示代码,仅供参考,谢谢!

from datetime import datetime

from pytz import utc, timezone


def get_current_pst_time():
    print('------------(1) Current time to PST time----------------')
    local_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    utc_time = datetime.now(tz=utc).strftime('%Y-%m-%d %H:%M:%S')
    pst_time = datetime.now(tz=utc).astimezone(timezone('US/Pacific')).strftime('%Y-%m-%d %H:%M:%S')
    is_summary_time = bool(datetime.now(tz=utc).astimezone(timezone('US/Pacific')).dst())
    print('is it a summary time? %s.' % is_summary_time)
    print('local time is %s.' % local_time)
    print('utc time is %s.' % utc_time)
    print('pst time is %s.' % pst_time)


def convert_pst_time_to_utc_time(pst_time_str):
    print('------------(2) PST time to UTC time----------------')
    print('pst time is %s.' % pst_time_str)
    temp_time = datetime.strptime(pst_time_str, '%Y-%m-%d %H:%M:%S')
    pacific_timezone = timezone('US/Pacific')
    pst_time = pacific_timezone.localize(temp_time, is_dst=None)
    assert pst_time.tzinfo is not None
    assert pst_time.tzinfo.utcoffset(pst_time) is not None
    is_summary_time = bool(pst_time.dst())
    print('is it a summary time? %s.' % is_summary_time)
    utc_time = pst_time.astimezone(timezone('utc'))
    print('utc time is %s.' % utc_time.strftime('%Y-%m-%d %H:%M:%S'))


def convert_utc_time_to_pst_time(utc_time_str):
    print('------------(3) UTC time to PST time----------------')
    print('utc time is %s.' % utc_time_str)
    temp_time = datetime.strptime(utc_time_str, '%Y-%m-%d %H:%M:%S')
    utc_timezone = timezone('utc')
    utc_time = utc_timezone.localize(temp_time, is_dst=None)
    assert utc_time.tzinfo is not None
    assert utc_time.tzinfo.utcoffset(utc_time) is not None
    pst_time = utc_time.astimezone(timezone('US/Pacific'))
    is_summary_time = bool(pst_time.dst())
    print('is it a summary time? %s.' % is_summary_time)
    print('pst time is %s.' % pst_time.strftime('%Y-%m-%d %H:%M:%S'))


if __name__ == '__main__':
    get_current_pst_time()
    convert_pst_time_to_utc_time('2019-12-03 02:00:00')
    convert_pst_time_to_utc_time('2020-07-03 02:00:00')

    convert_utc_time_to_pst_time('2019-12-03 10:00:00')
    convert_utc_time_to_pst_time('2020-07-03 09:00:00')

谷梁晟
2023-03-14

要将带有时区缩写(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=<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)可能不明确。请参见在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将时间(针对不同时区)转换为UTC

 类似资料:
  • 我正在尝试将pst时间戳转换为Java的gmt 我有一个时间戳为的字符串。我如何处理该字符串并将其转换为gmt时间戳? 我做了一些我想做的事,但还没去任何地方 结果是:

  • 我如何将日期时间转换为PST取决于他们在哪里(东部时间或格林尼治时间),并考虑到白天光节省。 任何帮助将是感激的。 谢谢你

  • 问题内容: 我需要将(在ec2实例上)UTC时间转换为PST。我正在尝试这样做。 但是输出是: 为什么我没有得到正确的PST时间? 问题答案: 似乎对我有用:)-时区令人迷惑,慢慢地制定一个我实际上想做的事情的计划在大多数时候对我有帮助

  • 问题内容: 我有一个UTC时间(纪元Unix时间),其格式设置为时间戳,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要将格式化为Unix时间的时间戳转换为GPS时间格式,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要一个python程序(算法对我来说很好)将Unix时间格式的时间戳转换为GPS时间格式的时间戳。 有一个PHP程序可以这样做。我

  • 问题内容: 有没有一种简单的方法可以将RFC 3339时间转换为常规Python时间戳? 我有一个脚本正在读取ATOM提要,并且我希望能够将ATOM提要中项目的时间戳与文件的修改时间进行比较。 我从ATOM规范中注意到,ATOM日期包含时区偏移量(),但就我而言,之后没有任何内容,因此我想我们可以假设格林尼治标准时间。 我想我可以用某种正则表达式来解析时间,但是我希望Python有一种内置的方式,

  • 我有一个Unix历元时间戳(以毫秒为单位),需要获取本地时间的日期字符串。 这是我的代码: 由上述函数生成的原始时间戳和结果日期、小时和所有其他值均以UTC为单位。如何更改代码以在当地时间获取它?