33

私はPythonでモジュールを作成しています。このモジュールでは20120213、2012年2月13日を意味するのような整数形式の日付を受け取ります。次に、この整数形式の日付をPythonの日付オブジェクトに変換します。

また、同じ形式の日付値を受け取るために、そのような整数形式の日付の日数を減算/加算できる手段がある場合はどうなりますか?から30日を引いて20120213、次のように答えを受け取るようなもの20120114ですか?

4

4 に答える 4

39

変換には、次の簡単なアプローチをお勧めします。

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オブジェクト

于 2012-03-17T13:30:46.383 に答える
37

この質問はすでに回答されていますが、この質問を見ている他の人のために、次の提案を追加したいと思います。上記のように自分でスライスする代わりに、strptime()(IMHO)読みやすく、おそらくこの変換を行うための好ましい方法。

import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
于 2012-06-24T21:42:00.150 に答える
10

これが私が質問に答えると信じているものです(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ます。

于 2016-06-07T08:39:31.423 に答える
3
import datetime

timestamp = datetime.datetime.fromtimestamp(1500000000)

print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))

これにより、次の出力が得られます。

2017-07-14 08:10:00
于 2021-02-03T02:07:12.957 に答える