python unix时间戳转换成时间_关于python:将unix时间戳字符串转换为可读日期

我有一个用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

返回问题链接:stackoverflow.com/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()(2011-)。将结果与使用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。stackoverflow.com/q/31548132/2960555

如果我想包括毫秒呢?

@用户传递一个浮点值,例如,如果有1234毫秒,则传递1.234秒(在十进制中很容易除以1000:只需将小数点向左移动3个位置即可)。

或者只是datetime.datetime.utcfromtimestamp(1398385815)。

>>> from datetime import datetime

>>> datetime.fromtimestamp(1172969203.1)

datetime.datetime(2007, 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 2010'

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

输出:

"2012年12月26日,"

为什么这次投票被否决了一次?如果你投了反对票,你至少应该解释为什么你会投正确的票?

我编辑并增加了清晰度。我用这个,仍然用这个代码来打印清除时间戳。

谁又投了反对票?评论和解释,而不是成为问题的一部分。

我的猜测是:它没有增加已经证明了两种方法的公认答案:.fromtimestamp()和.strftime()方法。注:getmtime()已经返回了一个float。

又一次投反对票?如果你要投反对票,至少要说明原因。

又一次投反对票?如果你要投反对票,至少要说明原因。

你可以这样转换当前时间

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

使用时间/日期时间比其他包装,熊猫也可以用来解决同样的问题。这是我们如何能够使用熊猫转换时间戳到读日期:

时间戳可以在双格式:

13位(milliseconds)milliseconds日期转换,使用:

import pandas

result_ms=pandas.to_datetime('1493530261000',unit='ms')

str(result_ms)

Output: '2017-04-30 05:31:01'

10位(秒)日期转换秒,使用:

import pandas

result_s=pandas.to_datetime('1493530261',unit='s')

str(result_s)

Output: '2017-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)))

输出:2018-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]))

"2013年- 5 - 1 9 43?

或者更简洁地说:"-".join(map(str,datetime.datetime.now().timetuple()[:6]))

@Jellezijlstra,我更喜欢生成器表达式而不是映射。

"2013-5-5-1-9-43"是哪种日期格式?我从来没有见过这种格式作为日期/时间的有效表示。

你能详细说明一下什么使这成为一个无效的代表@madoki吗?你是说不标准吗?与大多数其他答案相比,它的主要优势在于能够将其包含在文件或目录路径中,因为空间和冒号不在标准的UNIX目录字符集中。如stackoverflow.com/a/458001/209246

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值