Python:将日期时间戳转换为Epoch Unix时间并计算剩余天数?

5
我希望将2014-08-14 20:01:28.242转换为Unix时间戳245293529385,并从当前时间戳中减去它,以确定过去了多少天,并通过从14中减去该值来最终确定剩余天数。
场景:用户注册后,我想倒计算他们试用的剩余天数。

2
有一件事:我很确定 245293529385 不是正确的时间戳,因为它指的是 "Wed, 16 Jan 9743 11:29:45 GMT" ;) - michaelb
2个回答

6

time.strptime 可以帮助我们!使用格式字符串 %Y-%m-%d %H:%M:%S.%f。例如:

   import time
   t = '2014-08-14 20:01:28.242'
   ts = time.strptime(t, '%Y-%m-%d  %H:%M:%S.%f')
   timestamp = time.mktime(ts)

现在要将其转换为日期时间格式(来源:如何将Python time.struct_time对象转换为datetime对象?):

   from datetime import datetime
   dt = datetime.fromtimestamp(timestamp)

你也可以使用 datetime 来完成所有这些操作,而无需先处理 time - MattDMo
%f 表示微秒,左侧补零的十进制数。000000、000001、……、999999,对吗?这里 - B.Mr.W.
@B.Mr.W. 这里的第四条注释(https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior):“%f 是 C 标准中格式字符集的扩展[...] 当与 strptime() 方法一起使用时,%f 指令接受从一到六个数字,并在右侧进行零填充。” 因此它可以接受任意数量的字符。 - michaelb
@user299709 这是一个不同的问题,为什么不接受这个答案,并将您的更新作为一个新的独立问题发布呢? - michaelb
mktime()fromtimestamp()在某些系统上可能无法处理某些日期。而且它们并不是必需的,可以直接使用datetime.strptime()代替。 - jfs
显示剩余2条评论

2

有两个部分:

将输入的时间字符串转换为日期时间对象

#!/usr/bin/env python
from datetime import datetime

dt = datetime.strptime('2014-08-14 20:01:28.242', '%Y-%m-%d  %H:%M:%S.%f')

将datetime对象转换为Unix时间(“自纪元以来的秒数”)

结果取决于输入时间所使用的时区,例如,如果输入时间是UTC,则相应的POSIX时间戳为:

timestamp = (dt - datetime(1970,1,1)).total_seconds()
# -> 1408046488.242

如果您的输入是本地时区,则请参见如何在Python中将本地时间转换为UTC?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接