1

我有一个日期(我想它是 UTC,但也可能是本地时间)我想将此日期转换为秒......然后返回(秒 --> 日期)

因此,在对 Stackoverflow 进行了一些研究之后,我想出了这两个函数:

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 标志;如果未知,则使用 -1 作为 dst 标志),它表示本地时间的时间,而不是 UTC。

于 2013-05-29T12:18:11.670 回答