3

在 python 中,如果我在哪里做

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

从现在开始,它将给 epoch/unix 时间 40 秒,但是,我将如何做到这一点

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 和 divmods 的代码非常大。提前致谢。

4

3 回答 3

3

这几乎与我停止使用 time 并开始使用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

不幸的是,日期时间不会将天转换为月/年。我认为这是因为它必须计算闰年以及两个日期之间的月份。

>>> 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 文档中找到 - http://docs.python.org/2/library/datetime.html#tzinfo-objects

于 2013-10-07T15:30:53.480 回答
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

它还将考虑语言环境和系统配置的时区以将其打印出来。

于 2013-10-07T14:49:30.367 回答
0

对于要使用datetime模块的日期/时间:

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

(文档)

于 2013-10-07T14:59:30.317 回答