web-dev-qa-db-ja.com

Pythonで表現できる最も古い時間とは何ですか?

_time1_が_time2_より小さい場合にTrueを返す関数comp(time1, time2)を作成しました。 _time1_を常に_time2_よりも小さくする必要があるシナリオがあります。最小の値(つまり、可能な限り早い瞬間を表す)を得るには、_time1_が必要です。どうすればこの時間を取得できますか?

37
Prabhu

標準の問題のUNIXタイムスタンプ値を使用している場合、表現可能な最も早い時点は1970年に戻ります。

>>> import time
>>> time.gmtime(0)
(1970, 1, 1, 0, 0, 0, 3, 1, 0)
7
korona

datetime モジュール、 datetime 、および datetime オブジェクトを使用する場合、すべてのオブジェクトにminおよびmax属性。

>>> from datetime import date, time, datetime
>>> date.min
datetime.date(1, 1, 1)
>>> date.max
datetime.date(9999, 12, 31)
>>> time.min
datetime.time(0, 0)
>>> time.max
datetime.time(23, 59, 59, 999999)
>>> datetime.min
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
72
cledoux

Pythonでは、datetimeオブジェクトは次の定数をエクスポートします

datetime.MINYEAR
The smallest year number allowed in a date or datetime object. MINYEAR is 1.

datetime.MAXYEAR
The largest year number allowed in a date or datetime object. MAXYEAR is 9999.

http://docs.python.org/library/datetime.html

15
Silfverstrom

datetimeモジュールの特定の関数は、datetime.MINYEARおよびdatetime.MAXYEARに従い、その範囲外の日付に対してValueExceptionを発生させます。これらはそれぞれ1と9999に割り当てられます。

calenderモジュールはdatetimeモジュールに大きく依存していますが、一般に、両方向に無限に広がる “ proleptic Gregorian” を監視します。

timeモジュールも同様に、時間タプル値の年の要素に特定の制限を配置せず、エポック以降の秒のみを使用して時間と日付を計算します。


とはいえ、グレゴリオ暦が採用された1582年2月12日頃の日付を確実に処理することはできません。その前日まで、日付はさまざまな場所に依存するカレンダーを使用して計算されていましたが、標準のPythonではサポートされていません。

timeモジュールを使用している場合、実装で定義された最小時間と最大時間を処理できるプラットフォーム上のCライブラリ関数に委ねられるため、保証はありません。 https://docs.python.org/3/library/time.html 状態:

このモジュールで定義されている関数のほとんどは、同じ名前のプラットフォームCライブラリ関数を呼び出します。これらの関数のセマンティクスはプラットフォームによって異なるため、プラットフォームのドキュメントを参照すると役立つ場合があります。

および https://docs.python.org/3/library/time.html#time.mktime の状態:

時間を生成できる最も早い日付は、プラットフォームによって異なります。

これは、これらの関数がtime_t値を取得または返すためであり、C11標準に従っています。

clock_tおよびtime_tで表現できる時間の範囲と精度は、実装によって定義されます。

datetimeモジュールとは異なり、timeモジュールは、サポートする最小値と最大値を示す定数を公開しないため、プラットフォームの最小値と最大値を本当に見つける必要がある場合は、実行時に実験的にそれらを見つけるためにいくつかのコードを書く必要があります。 指数検索 を使用します。

0
Mark Amery