python - 使用 dateutil 从 PST 转换为 UTC 的问题
问题描述
我的本地机器当前时区是:
Mon May 20 17:44:50 PDT 2019
因此,当我进行 epoc 转换时,2019-04-01T00:00:00
我得到:1554102000
我应该1554076800
根据 www.epochconverter.com
我的功能如下所示:
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 小时的时间。
解决方案
我无法确定,因为您问题中的代码似乎缺少 and 的定义local_time
,local_zone
但我怀疑您遇到的问题源于这样一个事实,即timestamp()
给您一个 unix 时间,它没有时区的概念 - 它是自 unix 纪元以来以秒数*表示的绝对时间戳,请注意:
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
,我会得到相同的值:
print(dt.timestamp())
# 1546329600.0
print(dt2.timestamp())
# 1546329600.0
UTC 偏移信息在此过程中丢失。如果你想保留它,我建议单独存放它。
编辑:对不起,再次,我现在意识到您可能会遇到另一个问题,这取决于您的代码片段最初打算做什么。
因为.timestamp()
总是自动转换为 UTC,所以您的astimezone
呼叫什么也不做。如果您想要一个将字符串作为输入的函数,用 pattern 解析它,将其'%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)
或naive_time.timestamp()
将给出取决于您运行它的计算机的时区设置的结果。
推荐阅读
- html - 当 Bootstrap 模式关闭时,Youtube 视频仍在后台播放
- react-native - 在本机反应中,如何使键盘显示“折叠”或“最小化”键盘的键?
- c++ - 如何将平面缓冲区复制到其他缓冲区
- javascript - 可以直接更改数组长度产生错误吗?
- xml-parsing - 无法在 MAC 上为 arm64 配置构建 XERCESS 3.2.3
- python - 如何检查单元格是否在 Pandas 的特定位置具有特定字符
- android-studio - 无法解析配置 ':sample:_debugCompile' 的所有依赖项
- reactjs - React useEffect:“无法在未安装的组件上执行 React 状态更新”与 Redux
- r - 有没有一种快速的方法将数据框的所有列附加到单个列中?
- sql - 为什么我收到错误:CASE:语法错误