我有一个用python表示unix时间戳(即"1284101485")的字符串,我想把它转换成一个可读的日期。当我使用time.strftime时,我得到一个TypeError:
>>>import time
>>>print time.strftime("%B %d %Y","1284101485")
Traceback (most recent call last):
File"", line 1, in
TypeError: argument must be 9-item sequence, not str
返回问题链接:/q/19801727/3273031
使用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'))
如果本地时区具有不同的UTC偏移量,则.fromtimestamp()可能在过去的日期失败。您需要一个历史时区数据库,如pytz模块(或您的操作系统)提供的数据库。或者只在UTC工作,使用.utcfromtimestamp()。
@J.F.Sebastian你提到过这可能会在几条评论中失败-请你详细说明一下为什么过去的日期/时间会失败?(从投票结果来看,很多人都同意你的观点,并且认为这很简单)任何一个Unix时间戳都有一个简单的等效日期/时间吗?
@davidhood2采用python无法访问TZ数据库(windows)的系统,将本地时区设置为过去具有不同UTC偏移量的时区(例如欧洲/莫斯科),使用过去的时间戳调用fromTimestamp()(-)。将结果与使用pytz计算的值进行比较。如果不清楚,请单独问一个堆栈溢出问题。
@大卫:我已经发表了自己的答案,证明了pytz的解决方案。
一个导入点是这需要一个时间戳,从纪元开始,以秒为单位;如果你有毫秒,你必须除以1000,正如我刚刚发现的那样。
使用strftime比使用"{:%Y-%m-%d %H:%M:%S}".format(dateobj)有优势吗?
根据python文档,__format__()与strftime()相同,但我只喜欢strftime()。
如果您得到的是ValueError: year VALUE is out of range,这意味着您使用的是毫秒(unix时间戳是13位数字)。以上函数仅在unix时间戳(秒)内有效。如果使用的是毫秒,请将该值除以1000。/q/31548132/2960555
如果我想包括毫秒呢?
@用户传递一个浮点值,例如,如果有1234毫秒,则传递1.234秒(在十进制中很容易除以1000:只需将小数点向左移动3个位置即可)。
或者只是datetime.datetime.utcfromtimestamp(1398385815)。
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(, 3, 4, 0, 46, 43, 100000)
采取从http:/ / / / pdate seehuhn.de页
建议使用fromtimestamp评为最要之是因为它错误使用当地的时区。为了避免问题的一个更好的方法是:使用UTC
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
在POSIX POSIX时间是_时代时,你想转换
导入日期时间,pytz datetime.datetime(1990,1,1,tzinfo=pytz.utc)
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 '
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'
如果本地时区具有不同的UTC偏移量,则time.ctime()和time.localtime()可能在过去的日期失败。您需要一个历史时区数据库,如pytz模块(或您的操作系统)提供的数据库。或者在UTC工作,使用time.gmtime()。datetime可能提供更宽的日期范围,因此可以使用datetime.utcfromtimestamp()代替time功能。
有两个部件:
UNIX时间戳转换("")。")到本地时间
当地的时间显示在所需的格式。
一单把当地的便携式作品时,即使是一个不同的本地时区UTC偏移和Python在过去有没有访问到数据库是使用pytzTZ时区:
#!/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已经进入雅轩数据库对您的系统
local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
在Python中,你可以得到一个时区3,认识到仅用程序(UTC时间偏移可能是错的如果Python没有进入雅轩数据库在您的系统,例如,在Windows中):
#!/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))
一个人类可读的时间戳从UNIX时间戳,我有这个脚本中使用过:
import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")
输出:
"12月26日,"
为什么这次投票被否决了一次?如果你投了反对票,你至少应该解释为什么你会投正确的票?
我编辑并增加了清晰度。我用这个,仍然用这个代码来打印清除时间戳。
谁又投了反对票?评论和解释,而不是成为问题的一部分。
我的猜测是:它没有增加已经证明了两种方法的公认答案:.fromtimestamp()和.strftime()方法。注:getmtime()已经返回了一个float。
又一次投反对票?如果你要投反对票,至少要说明原因。
又一次投反对票?如果你要投反对票,至少要说明原因。
你可以这样转换当前时间
t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'-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('-03-03')
print FormatDate(o,'%d-%m-%Y')
Output 03-03-
使用时间/日期时间比其他包装,熊猫也可以用来解决同样的问题。这是我们如何能够使用熊猫转换时间戳到读日期:
时间戳可以在双格式:
13位(milliseconds)milliseconds日期转换,使用:
import pandas
result_ms=pandas.to_datetime('1493530261000',unit='ms')
str(result_ms)
Output: '-04-30 05:31:01'
10位(秒)日期转换秒,使用:
import pandas
result_s=pandas.to_datetime('1493530261',unit='s')
str(result_s)
Output: '-04-30 05:31:01'
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')
得到的日期时间戳时间从读,所以你可以改变格式的日期。
这个答案加了什么?
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
这是另一种方式可以做使用gmtime和格式的功能;
from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))
输出:-10-4 11:57:44
我只是成功的使用:
>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
非常感谢。这正是我要找的!
你可以使用简单的_约会让轻松:
import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485,"%B %d, %Y")
每个程序都有自己的日期和时间转换器。我们不应该为此使用mods/frameworks
strptime和strftime不是直观的…甚至不可读…但我理解并尊重你的意见
"不必使用"是错误的。这取决于语言和内置libs的质量。JavaScript具有Simult.JS和Java具有JoDA时间,它们比各自内置的日期和时间转换UTIL更受欢迎(因此JoDA时间后来影响了Java 8更新后的标准LIBS)。也就是说,除非这个问题需要优秀的第三方库,否则最好根据标准库给出答案。
我在Nikosventouras站着纠正。我第一次遇到了"JS日期在IE中的行为不同"的问题。所以我最终使用了moment.js
快速和肮脏的一班轮。
'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))
"- 5 - 1 9 43?
或者更简洁地说:"-".join(map(str,datetime.datetime.now().timetuple()[:6]))
@Jellezijlstra,我更喜欢生成器表达式而不是映射。
"-5-5-1-9-43"是哪种日期格式?我从来没有见过这种格式作为日期/时间的有效表示。
你能详细说明一下什么使这成为一个无效的代表@madoki吗?你是说不标准吗?与大多数其他答案相比,它的主要优势在于能够将其包含在文件或目录路径中,因为空间和冒号不在标准的UNIX目录字符集中。如/a/458001/209246