我有一个字符串表示unix时间戳(即。"1284101485"),我想把它转换成一个可读的日期。当我利用时间的时候。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

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

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


使用datetime模块:

from datetime import datetime
ts = int('1284101485')

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

>>> 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'

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

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

将字符串中的日期转换为不同的格式。

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

对于来自UNIX时间戳的人类可读时间戳,我以前在脚本中使用过:

import os, datetime

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

输出:

“2012年12月26日”


又快又脏的一句话:

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

'the 2013-5-5-2013-5-5'


import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp

我刚刚成功地使用了:

>>> 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")

投票最多的答案是使用fromtimestamp,这很容易出错,因为它使用本地时区。为了避免问题,一个更好的方法是使用UTC:

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

posix_time是要转换的Posix纪元时间


分为两部分:

将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))  

除了使用time/datetime包,还可以使用pandas来解决相同的问题。下面是如何使用pandas将时间戳转换为可读日期:

时间戳可以有两种格式:

13位(毫秒)- 要将毫秒转换为日期,请使用: 进口熊猫 result_ms = pandas.to_datetime(' 1493530261000 ',单位=“女士”) str (result_ms) 输出:'2017-04-30 05:31:01' 10位数(秒)- 要将秒转换为日期,请使用: 进口熊猫 result_s = pandas.to_datetime(' 1493530261 ',单位= ' s ') str (result_s) 输出:'2017-04-30 05:31:01'


timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

从带有时间的时间戳中获取可读的日期,还可以更改日期的格式。


另一种方法是使用gmtime和format函数;

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

输出:2018-10-4 11:57:44


在Python 3.6+中:

import datetime

timestamp = 1642445213
value = datetime.datetime.fromtimestamp(timestamp)
print(f"{value:%Y-%m-%d %H:%M:%S}")

输出(本地时间)

2022-01-17 20:46:53

解释

第1行:导入datetime库。 第2行:Unix时间,从1970-01-01开始,单位是秒。 第3行:将其转换为unix时间对象,检查:type(value) 第4行:打印与strp相同的格式。当地时间。要以UTC打印,请参阅下面的示例。

奖金

要将日期保存为字符串,然后打印它,使用以下命令:

my_date = f"{value:%Y-%m-%d %H:%M:%S}"
print(my_date)

以UTC格式输出:

value = datetime.datetime.fromtimestamp(timestamp, tz=datetime.timezone.utc)
# 2022-01-17 18:50:52

请注意,utcfromtimestamp可能会导致意想不到的结果,因为它返回一个朴素的datetime对象。Python将naive datetime视为本地时间——而UNIX时间指的是UTC。

可以通过在fromtimestamp中设置tz参数来避免这种歧义:

from datetime import datetime, timezone

dtobj = datetime.fromtimestamp(1284101485, timezone.utc)

>>> print(repr(dtobj))
datetime.datetime(2010, 9, 10, 6, 51, 25, tzinfo=datetime.timezone.utc)

现在你可以格式化为字符串,例如,符合ISO8601的格式:

>>> print(dtobj.isoformat(timespec='milliseconds').replace('+00:00', 'Z'))
2010-09-10T06:51:25.000Z

使用下面的代码,我希望它能解决你的问题。

import datetime as dt

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

如果你正在使用一个数据帧,并且不希望系列不能转换为类int错误。使用下面的代码。

new_df= pd.to_datetime(df_new['time'], unit='s')

使用datetime.strftime(格式):

from datetime import datetime
unixtime = int('1284101485')

# Print with local time
print(datetime.fromtimestamp(unixtime).strftime('%Y-%m-%d %H:%M:%S'))

# Print with UTC time
print(datetime.utcfromtimestamp(unixtime).strftime('%Y-%m-%d %H:%M:%S'))

datetime.fromtimestamp(timestamp):返回与POSIX时间戳对应的本地日期,例如time.time()返回的日期。 datetime.utcfromtimestamp(timestamp):返回与POSIX时间戳对应的UTC日期时间,tzinfo为None。(结果对象是朴素的。)