Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将人类可读的时间戳从历元转换为毫秒_Python_Python 2.7 - Fatal编程技术网

在Python中将人类可读的时间戳从历元转换为毫秒

在Python中将人类可读的时间戳从历元转换为毫秒,python,python-2.7,Python,Python 2.7,我有一个时间戳,比如“2016-05-24 11:30太平洋标准时间” 如何获取自历元以来的毫秒数?请考虑以下几点: 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.p

我有一个时间戳,比如“2016-05-24 11:30太平洋标准时间”


如何获取自历元以来的毫秒数?

请考虑以下几点:

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
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
太平洋/皮特凯恩
时区,但在
PST8PDT
中有缩写
PDT
。 因此,使用
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()
)。 时间戳返回以秒为单位的数量


太平洋/皮特凯恩
时区是使用

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'}
幸运的是,只有一个时区的localtime
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
不明确。因此,一般来说,您正在查找的时间戳可能没有唯一的解决方案(或任何解决方案)。

请考虑以下几点:

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
太平洋/皮特凯恩
时区,但在
PST8PDT
中有缩写
PDT
。 因此,使用
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()
)。 时间戳返回以秒为单位的数量


太平洋/皮特凯恩
时区是使用

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'}
幸运的是,只有一个时区的localtime
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
不明确。因此,一般来说,您正在寻找的时间戳可能没有唯一的解决方案(或任何解决方案)。

我完全同意。我提出的解决方案取决于时区,并不是所有时区的通用解决方案。我完全同意。我提出的解决方案取决于时区,并不是所有时区的通用解决方案。