为了清楚起见,这是Python2.6,我正在使用pytz。
这是一个只处理美国时区的应用程序,我需要能够锚定一个日期(今天),并获得一个unix时间戳(纪元时间)为晚上8点和晚上11点在太平洋标准时间。
这把我逼疯了。
> 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
所以,即使我设置了一个时区,并用该时区创建了datetime,它仍然将其创建为UTC,然后将其转换。这是一个更大的问题,因为当我试图计算时,UTC将提前一天。
有没有一种简单的(或者至少是感性的)方法来生成今天晚上8点太平洋标准时间的时间戳?
(为了清楚起见,我确实理解在大多数情况下使用UTC的价值,比如数据库时间戳,或者用于常规存储。这不是其中一种情况,我特别需要PST中晚上的时间戳,UTC不必输入时间戳。)
为UTC时区创建一个tzinfo对象
utc
,然后尝试:编辑:正如注释中指出的,将时区放入
datetime
构造函数并不总是健壮的。使用pytz documentation的首选方法是:还要注意,从注释中可以看出
strftime("%s")
是不可靠的,它忽略了时区信息(甚至是UTC),并假定运行它的系统的时区。它依赖于底层的C库实现,在某些系统(如Windows)上根本不起作用。至少有两个问题:
"US/Pacific"
)的时区作为tzinfo参数传递。你应该use ^{.strftime('%s')
是不可移植的,it ignores tzinfo,它总是使用本地时区。改用datetime.timestamp()
或its analogs on older Python versions。要使给定时区中的日期时间具有时区意识,请执行以下操作:
要获取POSIX时间戳:
(在Python 2.6上,see ^{} function on how to emulate ^{} method )。
相关问题 更多 >
编程相关推荐