在Python中将unix时间戳string转换为可读的date

我有一个string表示一个unix时间戳(即“1284101485”)在Python中,我想将其转换为可读的date。 当我使用time.strftime ,我得到一个TypeError

 >>>import time >>>print time.strftime("%B %d %Y", "1284101485") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument must be 9-item sequence, not str 

使用datetime模块:

 import datetime print( datetime.datetime.fromtimestamp( int("1284101485") ).strftime('%Y-%m-%d %H:%M:%S') ) 

在这段代码中, datetime.datetime看起来很奇怪,但是第一个datetime是模块名,第二个是类名。 所以datetime.datetime.fromtimestamp()是从datetime模块的datetime类的fromtimestamp()方法。

 >>> from datetime import datetime >>> datetime.fromtimestamp(1172969203.1) datetime.datetime(2007, 3, 4, 0, 46, 43, 100000) 

取自http://seehuhn.de/pages/pdate

最有投票的答案build议使用时间戳,这是因为它使用本地时区,容易出错。 为了避免问题,更好的方法是使用UTC:

 datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ') 

posix_time是你想要转换的Posix纪元时间

 >>> import time >>> time.ctime(int("1284101485")) 'Fri Sep 10 16:51:25 2010' >>> time.strftime("%D %H:%M", time.localtime(int("1284101485"))) '09/10/10 16:51' 

对于一个UNIX时间戳可读的时间戳,我已经在脚本中使用过了:

 import os, datetime datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y") 

输出:

'2012年12月26日'

你可以像这样转换当前时间

 t=datetime.fromtimestamp(time.time()) t.strftime('%Y-%m-%d') '2012-03-07' 

将string中的date转换为不同的格式。

 import datetime,time def createDateObject(str_date,strFormat="%Y-%m-%d"): timeStamp = time.mktime(time.strptime(str_date,strFormat)) return datetime.datetime.fromtimestamp(timeStamp) def FormatDate(objectDate,strFormat="%Y-%m-%d"): return objectDate.strftime(strFormat) Usage ===== o=createDateObject('2013-03-03') print FormatDate(o,'%d-%m-%Y') Output 03-03-2013 

有两个部分:

  1. 将unix时间戳(“epoch以来的秒数”)转换为当地时间
  2. 以所需的格式显示当地时间。

即使本地时区在过去有不同的utc偏移量,并且python无法访问tz数据库,也可以使用便携式方法来获取本地时间,即使用pytz时区:

 #!/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)")) 

如果您不关心可能影响返回date的时区问题,或者python可以访问系统上的tz数据库:

 local_time = datetime.fromtimestamp(unix_timestamp) print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f")) 

在Python 3中,只能使用stdlib获得时区感知的date时间(如果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)) 
 import datetime temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S') print temp 

快速和肮脏的一个class轮:

 '-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6])) 

'2013-5-5-1-9-43'

我只是成功地使用了:

 >>> type(tstamp) pandas.tslib.Timestamp >>> newDt = tstamp.date() >>> type(newDt) datetime.date 

您可以使用easy_date简化操作 :

 import date_converter my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y") 

你看看date时间包吗? 我相信它有一个fromUnixTimestamp方法。