lia*_*iam 19 python datetime pst pytz
为了清楚,这是python 2.6,我正在使用pytz.
这是针对仅处理美国时区的应用程序,我需要能够锚定日期(今天),并且仅在太平洋标准时间晚上8点和晚上11点获得unix时间戳(纪元时间).
这真让我抓狂.
> pacific = pytz.timezone("US/Pacific")
> datetime(2011,2,11,20,0,0,0,pacific)
datetime.datetime(2011, 2, 11, 20, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:0 STD>)
> datetime(2011,2,11,20,0,0,0,pacific).strftime("%s")
'1297454400'
zsh> date -d '@1297454400'
Fri Feb 11 12:00:00 PST 2011
Run Code Online (Sandbox Code Playgroud)
因此,即使我正在设置时区,并使用该时区创建日期时间,它仍然将其创建为UTC然后转换它.这是一个更大的问题,因为当我尝试进行计算时,UTC将会提前一天.
是否有一种简单(或至少是敏感)的方式来生成今天太平洋标准时间晚上8点的时间戳?
(很明显,我确实理解在大多数情况下使用UTC的价值,比如数据库时间戳,或者用于一般存储.这不是其中一种情况,我特别需要PST的晚上时间戳,UTC不应该进入它.)
Mar*_*som 15
utc为UTC时区创建一个tzinfo对象,然后尝试:
#XXX: WRONG (for any timezone with a non-fixed utc offset), DON'T DO IT
datetime(2011,2,11,20,0,0,0,pacific).astimezone(utc).strftime("%s")
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所指出的,将时区放入datetime构造函数并不总是很健壮.使用pytz文档的首选方法是:
pacific.localize(datetime(2011,2,11,20,0,0,0)).astimezone(utc).strftime("%s")
Run Code Online (Sandbox Code Playgroud)
还要注意strftime("%s")不可靠的注释,它会忽略时区信息(甚至是UTC)并假设它正在运行的系统的时区.它依赖于底层的C库实现,并且在某些系统(例如Windows)上根本不起作用.
jfs*_*jfs 15
至少有两个问题:
"US/Pacific"tzinfo参数.你应该使用pytz.timezone("US/Pacific").localize()方法,而不是.strftime('%s')不可移植,它忽略tzinfo,它总是使用本地时区.在旧的Python版本上使用datetime.timestamp()或使用它的类似物.要在给定时区中创建时区感知日期时间:
#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
tz = pytz.timezone("US/Pacific")
aware = tz.localize(datetime(2011, 2, 11, 20), is_dst=None)
Run Code Online (Sandbox Code Playgroud)
获取POSIX时间戳:
timestamp = (aware - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()
Run Code Online (Sandbox Code Playgroud)
(在Python 2.6上,请参阅totimestamp()有关如何模拟.total_seconds()方法的函数).
| 归档时间: |
|
| 查看次数: |
46250 次 |
| 最近记录: |