2016-05-25 14 views

答えて

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 
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が でPacific/Pitcairnタイムゾーンを省略形を持っていますが、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 

(ちなみに、is equivalent to (d - epoch).total_seconds()により、d.timestamp()を呼び出します)。 タイムスタンプは、数量を秒単位で返します。


Pacific/Pitcairnタイムゾーンは我々がlocaltimeの2016-05-24 11:30は略語PSTを使用する唯一のタイムゾーンがあることは幸運です

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 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があいまいです。したがって、一般的に、探しているタイムスタンプには独自の解決策(または解決策)がない場合があります。

+0

私は絶対に同意します。私が提案した解決策は、タイムゾーンに依存しており、すべてのタイムゾーンの一般的な解決策ではありません。 – 0111001101110000

関連する問題