我的本地计算机当前时区为:
Mon May 20 17:44:50 PDT 2019
因此,当我进行2019-04-01T00:00:00
的epoc转换时,我得到:1554102000
根据www.epochconverter.com,我应该得到1554076800
我的功能如下:
import time
from datetime import datetime
from dateutil import *
from dateutil.tz import *
input = '2019-04-01T00:00:00'
def convert_to_UTC_epoc(input):
utc_zone = tz.gettz('UTC')
pattern = '%Y-%m-%dT%H:%M:%S'
local_time = local_time.replace(tzinfo=local_zone)
utc_time = datetime.strptime(date_time,pattern).astimezone(utc_zone)
epoch = int(utc_time.timestamp())
return epoch
我认为使用utc_zone = tz.gettz('UTC')
可以将其设置为正确的时区,但由于某些原因,我仍然有7个小时的时间。
答案 0 :(得分:0)
我不确定,因为您问题中的代码似乎缺少local_time
和local_zone
的定义,但是我怀疑您遇到的问题是由于{{1 }}为您提供了一个unix时间,它没有时区的概念-这是自unix时代以来以秒数*表示的绝对时间戳,请注意:
timestamp()
dt = datetime(2019, 1, 1, tzinfo=tz.gettz("America/Los_Angeles"))
print(dt)
# 2019-01-01 00:00:00-08:00
dt2 = dt.astimezone(tz.UTC)
print(dt2)
# 2019-01-01 08:00:00+00:00
和dt
在这里都表示相同的绝对时间,但是在不同的时区中,如您所见,反映在不同的本地时间。因为它们表示同一时间,所以如果将它们转换为dt2
,我将得到相同的值:
timestamp
UTC偏移信息在此过程中丢失。如果要保留它,我建议单独存储。
编辑:很抱歉,我现在意识到您可能还会遇到另一个问题,这取决于您的代码片段最初打算做什么。
由于print(dt.timestamp())
# 1546329600.0
print(dt2.timestamp())
# 1546329600.0
始终自动转换为UTC,因此您的.timestamp()
调用没有任何作用。如果您想要一个将字符串作为输入的函数,使用模式astimezone
对其进行解析,将其解释为'%Y-%m-%dT%H:%M:%S'
(太平洋时间)中的时间,然后返回该时间的表示形式, :
America/Los_Angeles
天真时间被解释为机器本地时间,这意味着from datetime import datetime
from dateutil import tz
pattern = '%Y-%m-%dT%H:%M:%S'
PACIFIC = tz.gettz("America/Los_Angeles")
def dtstr_pst_to_epoch(date_string):
# Get datetime with no time zone information attached
naive_time = datetime.strptime(date_string, pattern)
# Reinterpret the naive datetime as being in Pacific time
pacific_time = naive_time.replace(tzinfo=PACIFIC)
# Return epoch representation
return pacific_time.timestamp()
或naive_time.astimezone(tz.UTC)
的结果将取决于运行它的计算机的时区设置。