0
A
答えて
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
があいまいです。したがって、一般的に、探しているタイムスタンプには独自の解決策(または解決策)がない場合があります。
関連する問題
- 1. エポックから人間が読める時間にリストを変換する
- 2. UNIXタイムスタンプ(ミリ秒)からPythonでHH:MM:SSに変換する
- 3. エポックからミリ秒を計算する
- 4. Apache Derbyを使用してエポックから日付をミリ秒に変換する
- 5. エポックからエポックを秒に変換するScalaのDateTime
- 6. エポック時間を人間が読める時間に変換するためのDjangoテンプレートタグ
- 7. unixタイムスタンプをlaravelの人間が読める日付に変換する
- 8. ミリ秒精度のPythonタイムスタンプ
- 9. Perl人間が読む時間をミリ秒でEPOCHに
- 10. ミリ秒のエポックをPL/SQLの日付形式に変換
- 11. タイムスタンプからミリ秒を削除する
- 12. Webkit/chromeタイムスタンプから人間が読める時間をjavaで
- 13. MS Accessでタイムスタンプを人間が読めるように変換する
- 14. Linuxカーネルの人間が読めるタイムスタンプ
- 15. タイムスタンプHH:MM:SS.xxxxxxxの列をミリ秒に変換する方法は?
- 16. ミリ秒のunixタイムスタンプをpostgres-readable timestamptzに変換する
- 17. Unixタイムスタンプ(ミリ秒単位)の行をdatetimeに変換する
- 18. ルビの日付オブジェクトからエポック時間をミリ秒にする方法は?
- 19. Teradataのタイムスタンプをエポックに変換する
- 20. PHP - unixタイムスタンプ(秒からミリ秒)
- 21. JavaScriptを積極的に秒からミリ秒に変換する
- 22. Java:文字列からタイムスタンプに変換するときにミリ秒が間違って解析される
- 23. 人にやさしい日付をミリ秒に変換する
- 24. ハイブ:ミリ秒のタイムスタンプを変換する方法は?
- 25. Epochから人間が読める日付を変数に変換する
- 26. ジョーダタイム変換時のゾーン時間をミリ秒に換算する
- 27. Scalaを使用してミリ秒の文字列をミリ秒単位のタイムスタンプに変換する方法は?
- 28. タイムスタンプ変換Java(Windowsの128ビットシステム構造人間の読める形式に
- 29. マイクロ秒を人間が読み取り可能な時間に変換する
- 30. 変換h:分:秒:ミリ秒から分:秒の秒数R
私は絶対に同意します。私が提案した解決策は、タイムゾーンに依存しており、すべてのタイムゾーンの一般的な解決策ではありません。 – 0111001101110000