分为两部分:
将unix时间戳("seconds since epoch")转换为本地时间
以所需格式显示本地时间。
获取本地时间的一种可移植方法是使用pytz时区,即使本地时区在过去具有不同的utc偏移量,并且python无法访问tz数据库:
#!/usr/bin/env python
from datetime import datetime
import tzlocal # $ pip install tzlocal
unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)
要显示它,你可以使用系统支持的任何时间格式,例如:
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y")) # print date in your format
如果你不需要一个本地时间,获得一个可读的UTC时间:
utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))
如果你不关心可能会影响返回日期的时区问题,或者python是否可以访问系统上的tz数据库:
local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
在Python 3上,你可以只使用stdlib来获得一个时区感知的datetime(如果Python无法访问你系统上的tz数据库,例如在Windows上,UTC偏移量可能是错误的):
#!/usr/bin/env python3
from datetime import datetime, timezone
utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
time模块中的函数是对应的C API的精简包装器,因此它们的可移植性可能不如相应的datetime方法,否则你也可以使用它们:
#!/usr/bin/env python
import time
unix_timestamp = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time))
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))