python datetimeモジュールを詳しく説明します。
datetimeはPython処理日時の標準ライブラリです。
現在の日付と時刻を取得
まず、現在の日付と時間をどうやって取得するかを見ます。
指定された日時の取得
日付と時間を指定するには、直接パラメータで
コンピュータでは、時間は実際には数字で表されています。私たちは1970年1月1日00:00 UTC+00:00タイムゾーンの時刻を「epoch time」と呼び、0(1970年以前の時間timestampはマイナス)と表記します。現在の時間はepoch timeに対する秒数です。timestampといいます。
考えられます
いくつかのプログラミング言語(JavaやJavaScriptなど)のtimestampは整数を使ってミリ秒数を表しています。この場合、timestampを1000で割るだけでPythonの浮動小数点表示方法が得られます。
timestampをdatetimeに変換します。
timestampを
ローカル時間とは、現在のオペレーティングシステムが設定しているタイムゾーンのことです。例えば北京時間区は東8区で、現地時間:
2015-04-19 12:20:00
実はUTC+8:00タイムゾーンの時間です。
2015-04-19 12:20 UTC+8:00
今のグリニッジの標準時間は北京と8時間の差があります。つまりUTC+0:00の時間帯は次の通りです。
2015-04-19 04:20 UTC+0:00
timestampはUTC標準タイムゾーンに直接変換されることもできます。
多くの場合、ユーザーが入力した日付と時間は文字列で、日付と時間を処理するには、まずstrをdatetimeに変換しなければなりません。変換方法は、datetime.streptime()によって実現され、日付と時間の書式設定文字列が必要です。
変換後のdatetimeにはタイムゾーン情報がありません。
datetimeはstrに変わります
すでにdatetimeオブジェクトがある場合、文字列として表示するには、strに変換する必要があります。変換方法は
日付と時間を加減するということは、実はdatetimeを後にしたり前に計算したりして、新しいdatetimeが得られます。プラスマイナスは直接+と-演算子を使うことができますが、
ローカル時間をUTC時間に変換
ローカル時間とは、システムがタイムゾーンを設定する時間、例えば北京時間はUTC+8:00タイムゾーンの時間を指し、UTC時間はUTC+0:00タイムゾーンの時間を指す。
タイムゾーン変換
まず
タイムゾーンの
注:UTC+0:00タイムゾーンから他のタイムゾーンに変換しなければならないわけではなく、タイムゾーン
結び目
以上はpython datetimeモジュールの詳細を説明します。python datetimeモジュールに関する詳細は他の関連記事に注目してください。
現在の日付と時刻を取得
まず、現在の日付と時間をどうやって取得するかを見ます。
>>> from datetime import datetime
>>> now = datetime.now() # datetime
>>> print(now)
2015-05-18 16:28:07.198690
>>> print(type(now))
<class 'datetime.datetime'>
datetime
はモジュールであり、datetime
はまたdatetime
クラスを含んでいます。from datetime import datetime
を通じて導入されたのがdatetime
クラスです。import datetime
だけ導入されるなら、フルネームdatetime.datetime
を参照してください。datetime.now()
は現在の日付と時間を返します。そのタイプはdatetime
です。指定された日時の取得
日付と時間を指定するには、直接パラメータで
datetime
を作成します。
>>> from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20) # datetime
>>> print(dt)
2015-04-19 12:20:00
datetimeをtimestampに変換します。コンピュータでは、時間は実際には数字で表されています。私たちは1970年1月1日00:00 UTC+00:00タイムゾーンの時刻を「epoch time」と呼び、0(1970年以前の時間timestampはマイナス)と表記します。現在の時間はepoch timeに対する秒数です。timestampといいます。
考えられます
timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00
対応する北京時間は:
timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00
timestampの値はタイムゾーンとは無関係であることが分かります。timestampが確定すると、そのUTC時間が確定し、任意のタイムゾーンに変換する時間も完全に確定されます。これはなぜコンピュータに記憶されている現在の時間はtimestampで表されていますか?全世界の計算機はどの時刻でもtimestampが完全に同じです。datetime
タイプをtimestampに変換するには、簡単にtimestamp()
メソッドを呼び出す必要があります。
>>> from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20) # datetime
>>> dt.timestamp() # datetime timestamp
1429417200.0
注意Pythonのtimestampは浮動小数点です。小数位がある場合、小数位はミリ秒数を表します。いくつかのプログラミング言語(JavaやJavaScriptなど)のtimestampは整数を使ってミリ秒数を表しています。この場合、timestampを1000で割るだけでPythonの浮動小数点表示方法が得られます。
timestampをdatetimeに変換します。
timestampを
datetime
に変換し、datetime
で提供されるfromtimestamp()
の方法を使用します。
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print(datetime.fromtimestamp(t))
2015-04-19 12:20:00
timestampは浮動小数点であることに気づきました。タイムゾーンの概念がなく、datetimeにはタイムゾーンがあります。上記の変換は、timestampとローカル時間で変換されます。ローカル時間とは、現在のオペレーティングシステムが設定しているタイムゾーンのことです。例えば北京時間区は東8区で、現地時間:
2015-04-19 12:20:00
実はUTC+8:00タイムゾーンの時間です。
2015-04-19 12:20 UTC+8:00
今のグリニッジの標準時間は北京と8時間の差があります。つまりUTC+0:00の時間帯は次の通りです。
2015-04-19 04:20 UTC+0:00
timestampはUTC標準タイムゾーンに直接変換されることもできます。
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print(datetime.fromtimestamp(t)) #
2015-04-19 12:20:00
>>> print(datetime.utcfromtimestamp(t)) # UTC
2015-04-19 04:20:00
strをdatetimeに変換します多くの場合、ユーザーが入力した日付と時間は文字列で、日付と時間を処理するには、まずstrをdatetimeに変換しなければなりません。変換方法は、datetime.streptime()によって実現され、日付と時間の書式設定文字列が必要です。
>>> from datetime import datetime
>>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>> print(cday)
2015-06-01 18:19:59
文字列'%Y-%m-%d %H:%M:%S'
は、日付と時間の部分のフォーマットを規定している。詳細はPython文書を参照してください。変換後のdatetimeにはタイムゾーン情報がありません。
datetimeはstrに変わります
すでにdatetimeオブジェクトがある場合、文字列として表示するには、strに変換する必要があります。変換方法は
strftime()
によって実現されます。同様に日付と時間の書式設定文字列が必要です。
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime('%a, %b %d %H:%M'))
Mon, May 05 16:28
datetime加减日付と時間を加減するということは、実はdatetimeを後にしたり前に計算したりして、新しいdatetimeが得られます。プラスマイナスは直接+と-演算子を使うことができますが、
timedelta
というクラスを導入する必要があります。
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
timedeltaを使うと、先日と数日後の時刻が簡単に計算できます。ローカル時間をUTC時間に変換
ローカル時間とは、システムがタイムゾーンを設定する時間、例えば北京時間はUTC+8:00タイムゾーンの時間を指し、UTC時間はUTC+0:00タイムゾーンの時間を指す。
datetime
タイプは、タイムゾーン属性tzinfo
がありますが、デフォルトはNone
ですので、このdatetime
はどのタイムゾーンなのかは区別できません。
>>> from datetime import datetime, timedelta, timezone
>>> tz_utc_8 = timezone(timedelta(hours=8)) # UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012)
>>> dt = now.replace(tzinfo=tz_utc_8) # UTC+8:00
>>> dt
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
もしシステムタイムゾーンがUTC+8:00であれば、上記のコードは正しいです。そうでなければ、強制的にUTC+8:00タイムゾーンに設定できません。タイムゾーン変換
まず
datetime
を通じて現在のUTC時間を取得してから、任意のタイムゾーンの時間に変えられます。
# UTC , UTC+0:00:
>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2015-05-18 09:05:12.377316+00:00
# astimezone() :
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)
2015-05-18 17:05:12.377316+08:00
# astimezone() :
>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt)
2015-05-18 18:05:12.377316+09:00
# astimezone() bj_dt :
>>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt2)
2015-05-18 18:05:12.377316+09:00
タイムゾーン変換の鍵はutcnow()
を取得する時、正しいタイムゾーンを知るために、タイムゾーンを強制的に設定し、基準時間とします。タイムゾーンの
datetime
を利用して、datetime
方法により、任意のタイムゾーンに変換することができます。注:UTC+0:00タイムゾーンから他のタイムゾーンに変換しなければならないわけではなく、タイムゾーン
astimezone()
は、上記datetime
からbj_dt
への変換など、正確に変換できます。結び目
tokyo_dt
によって表される時間は、エリア情報を必要として、特定の時間を決定することができます。そうでなければ、ローカル時間と見なすことができます。datetime
を記憶する場合、最適な方法は、タイムゾーンとは全く関係がないので、timestampの値をtimestampに変換して再記憶することである。以上はpython datetimeモジュールの詳細を説明します。python datetimeモジュールに関する詳細は他の関連記事に注目してください。