在 python 中,如果我要做什么
import time
print(time.time()+40)
从现在开始它会给纪元/unix 时间 40 秒,但是,我该怎么做呢
import time
def difference(x):
Time = time.time()+x
difference = Time-time.time()
return difference
现在,我一直很好用,直到你得到比 60 秒(一分钟)更高的数字,并且在像一年这样的大范围内会变得非常困惑,有没有一种方法可以把它变成分钟或小时, days,years 在一个简单的方法中,所以它可以返回这样的东西?
return "That time is %s years from now %s days %s hours %s minutes and %s seconds from now"
我可以想办法做到这一点,但我担心我这样做的方式会导致使用大量 if/else 和 divmod 的非常大的代码。提前致谢。
最佳答案
这几乎是我停止使用时间并开始使用 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
关于python - 将 epoch/unix 时间转换为可读格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19227798/