我的时间戳类似于" 2016-05-24 11:30 PST"。
如何获得纪元以来的毫秒数?
答案 0 :(得分:2)
请考虑以下事项:
import datetime as DT
import dateutil.parser as DP
import pytz
t = "2016-05-24 11:30 PST"
date = DP.parse(t)
DATE_FORMAT = '%Y-%m-%d %H:%M:%S %Z%z'
wrong_tzone = pytz.timezone('PST8PDT')
wrong_date = wrong_tzone.localize(date)
print('{:16}: {}'.format(str(wrong_tzone), wrong_date.strftime(DATE_FORMAT)))
# PST8PDT : 2016-05-24 11:30:00 PDT-0700
right_tzone = pytz.timezone('Pacific/Pitcairn')
right_date = right_tzone.localize(date)
print('{:16}: {}'.format(str(right_tzone), right_date.strftime(DATE_FORMAT)))
# Pacific/Pitcairn: 2016-05-24 11:30:00 PST-0800
这表示当地时间2016-05-24 11:30
的缩写为PST
Pacific/Pitcairn
时区,但在PDT
中有缩写PST8PDT
。
因此,使用PST8PDT
时区来2016-05-24 11:30
进行本地化是没有意义的。
选择正确的时区会影响时间戳:
In [274]: wrong_date.timestamp()
Out[274]: 1464114600.0
In [275]: right_date.timestamp()
Out[275]: 1464118200.0
(顺便打电话给d.timestamp()
,is equivalent to (d - epoch).total_seconds()
)。
时间戳以秒为单位返回数量。
使用
找到Pacific/Pitcairn
时区
import datetime as DT
import dateutil.parser as DP
import pytz
import collections
t = "2016-05-24 11:30 PST"
date = DP.parse(t)
tzones = collections.defaultdict(set)
for name in pytz.all_timezones:
tzone = pytz.timezone(name)
tzabbrev = tzone.normalize(tzone.localize(date)).tzname()
tzones[tzabbrev].add(name)
print(tzones['PST'])
# {'Pacific/Pitcairn'}
我们很幸运,只有一个时区,本地时间2016-05-24 11:30
使用缩写PST。一般来说,许多时区都可以
与相同的缩写相关联。例如,2016-05-24 11:30 CST
可以参考
任何这些时区:
In [283]: tzones['CST']
Out[283]:
{'America/Belize',
'America/Costa_Rica',
'America/El_Salvador',
'America/Guatemala',
'America/Managua',
'America/Regina',
'America/Swift_Current',
'America/Tegucigalpa',
'Asia/Chongqing',
'Asia/Chungking',
'Asia/Harbin',
'Asia/Macao',
'Asia/Macau',
'Asia/Shanghai',
'Asia/Taipei',
'Canada/East-Saskatchewan',
'Canada/Saskatchewan',
'PRC',
'ROC'}
2016-05-24 11:30 CST
含糊不清。因此,一般而言,您正在寻找的时间戳可能没有唯一的解决方案(或任何解决方案)。
答案 1 :(得分:0)
import datetime
import pytz
import dateutil
t = "2016-05-24 11:30 PST"
#Convert the timestamp to a datetime object with timezone information
d = pytz.timezone("PST8PDT").localize(dateutil.parser.parse(t))
#In order to subtract a datetime object with timezone information is required.
#Build the epoch datetime object with a timezone
epoch = pytz.timezone("UTC").localize(datetime.datetime.utcfromtimestamp(0))
#Subtract the epoch from the human enocoded datetime object
(d - epoch).total_seconds() * 1000