私はPythonでモジュールを作成しています。このモジュールでは20120213
、2012年2月13日を意味するのような整数形式の日付を受け取ります。次に、この整数形式の日付をPythonの日付オブジェクトに変換します。
また、同じ形式の日付値を受け取るために、そのような整数形式の日付の日数を減算/加算できる手段がある場合はどうなりますか?から30日を引いて20120213
、次のように答えを受け取るようなもの20120114
ですか?
私はPythonでモジュールを作成しています。このモジュールでは20120213
、2012年2月13日を意味するのような整数形式の日付を受け取ります。次に、この整数形式の日付をPythonの日付オブジェクトに変換します。
また、同じ形式の日付値を受け取るために、そのような整数形式の日付の日数を減算/加算できる手段がある場合はどうなりますか?から30日を引いて20120213
、次のように答えを受け取るようなもの20120114
ですか?
変換には、次の簡単なアプローチをお勧めします。
from datetime import datetime, timedelta
s = "20120213"
# you could also import date instead of datetime and use that.
date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8]))
任意の日数を加算/減算する場合(秒はあまりにもうまくいきます)、次のようにすることができます。
date += timedelta(days=10)
date -= timedelta(days=5)
そして、以下を使用して元に戻します。
s = date.strftime("%Y%m%d")
整数を安全に文字列に変換するには、次を使用します。
s = "{0:-08d}".format(i)
これにより、年が1000より小さい場合でも、文字列の長さが8文字になり、ゼロが左に埋め込まれます(ただし、負の年はおかしくなる可能性があります)。
詳細参照:日時オブジェクト、timedeltaオブジェクト
この質問はすでに回答されていますが、この質問を見ている他の人のために、次の提案を追加したいと思います。上記のように自分でスライスする代わりに、strptime()
(IMHO)読みやすく、おそらくこの変換を行うための好ましい方法。
import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
これが私が質問に答えると信じているものです(Python 3、タイプヒント付き):
from datetime import date
def int2date(argdate: int) -> date:
"""
If you have date as an integer, use this method to obtain a datetime.date object.
Parameters
----------
argdate : int
Date as a regular integer value (example: 20160618)
Returns
-------
dateandtime.date
A date object which corresponds to the given value `argdate`.
"""
year = int(argdate / 10000)
month = int((argdate % 10000) / 100)
day = int(argdate % 100)
return date(year, month, day)
print(int2date(20160618))
上記のコードは、期待されるを生成し2016-06-18
ます。
import datetime
timestamp = datetime.datetime.fromtimestamp(1500000000)
print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))
これにより、次の出力が得られます。
2017-07-14 08:10:00