3
>>> import time
>>> time.strptime("01-31-2009", "%m-%d-%Y")
(2009, 1, 31, 0, 0, 0, 5, 31, -1)
>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233378000.0
>>> 60*60*24 # seconds in a day
86400
>>> 1233378000.0 / 86400
14275.208333333334

time.mktimeエポックからの秒数を返す必要があります。私は真夜中に時間を与えており、エポックは真夜中にあるので、結果は 1 日の秒数で割り切れないのでしょうか?

4

4 に答える 4

7

簡単な答え: タイムゾーンのためです。

エポックは UTC です。

たとえば、IST (アイルランド標準時) または UTC+1 を使用しています。time.mktime()私のタイムゾーンに関連しているので、私のシステムではこれは

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000.0

1233378000 という結果が得られたので、5 時間遅れていることがわかります。

>>> (1233378000 - 1233360000) / (60*60)    
5

time.gmtime()UTC をオフに動作する関数を見てください。

于 2008-08-22T09:24:25.770 に答える
3
mktime(...)
    mktime(tuple) -> floating point number

    Convert a time tuple in local time to seconds since the Epoch.

現地時間...空想します。

時間タプル:

The other representation is a tuple of 9 integers giving local time.
The tuple items are:
  year (four digits, e.g. 1998)
  month (1-12)
  day (1-31)
  hours (0-23)
  minutes (0-59)
  seconds (0-59)
  weekday (0-6, Monday is 0)
  Julian day (day in the year, 1-366)
  DST (Daylight Savings Time) flag (-1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

ちなみに、私たちは6時間離れているようです:

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233356400.0
>>> (1233378000.0 - 1233356400)/(60*60)
6.0
于 2008-08-22T09:21:55.697 に答える
2

フィルの答えは本当に解決しましたが、もう少し詳しく説明します。エポックは UTC であるため、他の時間をエポックと比較したい場合は、それらも UTC として解釈する必要があります。

>>> calendar.timegm((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000
>>> 1233360000 / (60*60*24)
14275

タイムタプルを UTC 時間として扱うタイムスタンプに変換することで、1 日の秒数で割り切れる数値が得られます

これを使用して、日付をエポックからの日数表現に変換できます。これは、最終的に求めているものです。

于 2008-08-22T10:12:25.140 に答える
0

面白い。わかりませんが、これを試しました:

>>> now = time.mktime((2008, 8, 22, 11 ,17, -1, -1, -1, -1))
>>> tomorrow = time.mktime((2008, 8, 23, 11 ,17, -1, -1, -1, -1))
>>> tomorrow - now
86400.0

これはあなたが期待したものです。私の推測?エポック以来、いくつかの時間修正が行われた可能性があります。これはうるう年のようにほんの数秒かもしれません。このようなことは前に聞いたことがあると思いますが、それがいつ、どのように行われたか正確には思い出せません...

于 2008-08-22T09:22:08.317 に答える