1

日付があります(UTCだと思いますが、現地時間でもあるかもしれません)この日付を秒に変換したいと思います...そして元に戻します(秒->日付)

そのため、Stackoverflow でいくつかの調査を行った後、次の 2 つの関数を思いつきました。

def UTC_to_sec(utc_time):
    """
    convert time in UTC to seconds. 
    input: s string
    output: float
    """
    return time.mktime( datetime.datetime.strptime(utc_time, "%Y-%m-%d %H:%M:%S").timetuple() )

def sec_to_UTC(s):
   """
    convert time in to seconds  to UTC.  
    input: time in seconds (float)
    output: string

    """
   return datetime.datetime.utcfromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S')

# test with mydate="2010-09-15 08:31:00"
print "time ", mydate, " (UTC) --> (",UTC_to_sec(maydate), ") [s] --> ",sec_to_UTC(UTC_to_sec(mydate)), " (UTC)"

結果は次のとおりです。

時刻 2010-09-15 08 :31:00 (UTC) --> (1284532260.0) [s] --> 2010-09-15 06 :31:00 (UTC)

mydateこれは、UTC ではなく現地時間であったことを意味しますか?

次のように関数を変更すると、正しい結果が得sec_to_UTC()られます。

datetime.datetime.utcfromtimestamp(s-time.altzone).strftime('%Y-%m-%d %H:%M:%S')

time.altzone私の場合は -7200 [s] です。しかし、これは厄介な回避策です。

私の質問は: 前述の日付 - 秒 - 日付の変換がタイムゾーンに依存する理由は何ですか?

4

1 に答える 1

1

犯人はtime.mktime()

ドキュメントから:

これは localtime() の逆関数です。その引数は struct_time または完全な 9 タプル (dst フラグが必要なため。不明な場合は dst フラグとして -1 を使用) であり、UTC ではなく現地時間で時刻を表します。

于 2013-05-29T12:18:11.670 に答える