将unix时间戳字符串转换为可读日期
我有一个在Python 中表示unix 时间戳的字符串(即“1284101485”),我想将其转换为可读的日期。当我使用 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
I have a string representing a unix timestamp (i.e. "1284101485") in Python, and I'd like to convert it to a readable date. When I use time.strftime
, I get a 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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
使用
datetime
模块:Use
datetime
module:摘自http://seehuhn.de/pages/pdate
Taken from http://seehuhn.de/pages/pdate
投票最多的答案建议使用 fromtimestamp ,这很容易出错,因为它使用本地时区。为了避免出现问题,更好的方法是使用 UTC:
其中 posix_time 是要转换的 Posix 纪元时间
The most voted answer suggests using fromtimestamp which is error prone since it uses the local timezone. To avoid issues a better approach is to use UTC:
Where posix_time is the Posix epoch time you want to convert
有两个部分:
即使本地时区过去有不同的 utc 偏移量并且 python 无法访问 tz 数据库,获取本地时间的一种可移植方法是使用 pytz 时区:
显示它,您可以使用系统支持的任何时间格式,例如:
如果您不需要本地时间,则可以获取可读的 UTC 时间:
如果您不关心可能影响日期的时区问题返回或者如果 python 可以访问您系统上的 tz 数据库:
在 Python 3 上,您可以仅使用 stdlib 获得时区感知的日期时间(如果 python 无法访问 tz 数据库,则 UTC 偏移量可能是错误的在您的系统上(例如,在 Windows 上):
time
模块中的函数是相应 C API 的薄包装器,因此它们可能不如相应的datetime
方法可移植,否则您也可以使用它们:There are two parts:
A portable way to get the local time that works even if the local time zone had a different utc offset in the past and python has no access to the tz database is to use a
pytz
timezone:To display it, you could use any time format that is supported by your system e.g.:
If you do not need a local time, to get a readable UTC time instead:
If you don't care about the timezone issues that might affect what date is returned or if python has access to the tz database on your system:
On Python 3, you could get a timezone-aware datetime using only stdlib (the UTC offset may be wrong if python has no access to the tz database on your system e.g., on Windows):
Functions from the
time
module are thin wrappers around the corresponding C API and therefore they may be less portable than the correspondingdatetime
methods otherwise you could use them too:在 Python 3.6+ 中:
输出(当地时间)
解释
type(value)
Bonus
要将日期保存到字符串中然后打印它,请使用以下命令:
要以 UTC 输出:
In Python 3.6+:
Output (local time)
Explanation
type(value)
Bonus
To save the date to a string then print it, use this:
To output in UTC:
除了使用time/datetime包之外,还可以使用pandas来解决同样的问题。下面是我们如何使用pandas来转换< strong>时间戳到可读日期:
时间戳可以采用两种格式:
13 位数字(毫秒)-
要将毫秒转换为日期,请使用:
10 位数字(秒)-
要将秒转换为日期,请使用:
Other than using time/datetime package, pandas can also be used to solve the same problem.Here is how we can use pandas to convert timestamp to readable date:
Timestamps can be in two formats:
13 digits(milliseconds) -
To convert milliseconds to date, use:
10 digits(seconds) -
To convert seconds to date, use:
对于来自 UNIX 时间戳的人类可读时间戳,我之前在脚本中使用过它:
输出:
“2012 年 12 月 26 日”
For a human readable timestamp from a UNIX timestamp, I have used this in scripts before:
Output:
'December 26, 2012'
您可以像这样转换当前时间
将字符串中的日期转换为不同的格式。
You can convert the current time like this
To convert a date in string to different formats.
还可以从时间戳和时间中获取可读日期,您也可以更改日期的格式。
Get the readable date from timestamp with time also, also you can change the format of the date.
使用
datetime.strftime(format)
< /a>:datetime.fromtimestamp(timestamp )
:返回POSIX时间戳对应的本地日期,如time.time()
返回。datetime.utcfromtimestamp(时间戳)
:返回POSIX时间戳对应的UTC日期时间,tzinfo为None。 (生成的对象是幼稚的。)Use
datetime.strftime(format)
:datetime.fromtimestamp(timestamp)
: Return the local date corresponding to the POSIX timestamp, such as is returned bytime.time()
.datetime.utcfromtimestamp(timestamp)
: Return the UTC datetime corresponding to the POSIX timestamp, with tzinfo None. (The resulting object is naive.)请注意,
utcfromtimestamp
可能会导致意外结果因为它返回一个简单的日期时间对象。 Python 将原始日期时间视为本地时间 - 而 UNIX 时间指的是 UTC。通过在
fromtimestamp
中设置tz
参数可以避免这种歧义:现在您可以格式化为字符串,例如符合 ISO8601 的格式:
Note that
utcfromtimestamp
can lead to unexpected results since it returns a naive datetime object. Python treats naive datetime as local time - while UNIX time refers to UTC.This ambiguity can be avoided by setting the
tz
argument infromtimestamp
:Now you can format to string, e.g. an ISO8601 compliant format:
使用以下代码,希望能解决您的问题。
Use the following codes, I hope it will solve your problem.
另一种方法可以使用 gmtime 和 format 函数来完成此操作;
输出:
2018-10-4 11:57:44
Another way that this can be done using gmtime and format function;
Output:
2018-10-4 11:57:44
如果您正在使用数据帧并且不希望
series无法转换为class int
错误。使用下面的代码。If you are working with a dataframe and do not want the
series cannot be converted to class int
error. Use the code below.我刚刚成功使用:
i just successfully used:
您可以使用 easy_date 来简化操作:
You can use easy_date to make it easy:
又快又脏的一行:
'2013-5-5-1-9-43'
quick and dirty one liner:
'2013-5-5-1-9-43'
我使用 pytz 创建一个将 UNIX 日期和时间转换为赫尔辛基时区的函数:
并获取值:
输出如下所示:
I used pytz to create a function that converts the UNIX date and time to Helsinki timezone:
and to get the values:
the output looks like this: