将epoch / unix时间转换为可读格式

时间:2013-10-07 14:44:10

标签: python time

在python中如果我去哪里

import time
print(time.time()+40)

从现在起40秒后它会给出epoch / unix时间,但是,我怎么能这样做呢

import time
def difference(x):
    Time = time.time()+x
    difference = Time-time.time()
    return difference

现在,我的工作效果很好,直到你获得的数字高于60秒(一分钟),并且大规模的一年就会变得非常混乱,有没有办法让它变成几分钟或几小时,几天,一个简单的方法,所以它可以返回这样的东西?

return "That time is %s years from now %s days %s hours %s minutes and %s seconds from now"

我可以想办法做到这一点,但我担心我这样做的方式会导致使用很多if / else和divmod的非常大的代码。提前谢谢。

3 个答案:

答案 0 :(得分:3)

这几乎与我停止使用时间并开始使用datetime

完全相同
from datetime import tzinfo, timedelta, datetime
now = datetime.utcnow()
later = now - timedelta(seconds=40)


>>> now
datetime.datetime(2013, 10, 7, 15, 9, 5, 903000)
>>> print now
2013-10-07 15:09:05.903000
>>> print later
2013-10-07 15:08:25.903000

所以现在你可以减去差异。

now = datetime.utcnow()
later = now + timedelta(weeks=78, minutes=85, seconds=128)
diff = later - now

不幸的是,datetime不会将天数转换为数月/年。我认为这是因为它必须在两年内计算,哪些月份在两个日期之间。

>>> print diff
546 days, 1:27:08




额外信息:

如果你开始进入其他时区,因为你需要提供一个时区对象,它会变得有点复杂。这是一个简单的版本:

################################################################################
#Class definition for EST timezone since python doesn't have one
class EST(tzinfo):
    def utcoffset(self, dt):
        return timedelta(-5)

    def tzname(self, dt):
        return "EST"

    def dst(self, dt):
        return timedelta(0)

################################################################################
#Class definition for CST timezone since python doesn't have one
class CST(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=-6)

    def tzname(self, dt):
        return "CST"

    def dst(self, dt):
        return timedelta(0)


nowcst = datetime.now(tz=CST())
nowest = now.replace(tzinfo(EST())

使用时区真的应该考虑夏令时 *示例代码可以在python docs中找到 - http://docs.python.org/2/library/datetime.html#tzinfo-objects

答案 1 :(得分:0)

通常,time.time()返回的值不需要像您所示的difference()函数,因为减法运算符就是这样。

t0 = time.time()
# ...
t_later = time.time()

elapsed = t_later - t0
  

有一种方法可以让它在一个简单的方法中将它变成几分钟或几小时,几天,几年,这样就可以返回类似这样的东西

是的,time.strftime就是这种方法: http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

它还会考虑区域设置和系统配置的时区来打印出来。

答案 2 :(得分:0)

要处理日期/时间,您需要使用datetime模块:

from datetime import datetime, timedelta
td = timedelta(seconds=520)
out = td.__str__()
print out

(doc)