检查自时区到时间戳为止的XX秒是否已超过时区'格式

时间:2017-01-13 14:48:38

标签: python time

我有一个用Django创建的db记录,其中包含'created_at'字段格式'带时区的时间戳':2017-01-13 14:12:18.307877 + 00:00。

我需要检查在此时间和现在之间是否已经过了30秒。 我应该先将其转换为纪元时间吗?如果是,如何,不受时区问题的影响?

2 个答案:

答案 0 :(得分:0)

如果这是一个日期时间对象,那么你可以减去另一个日期时间对象并得到一个timedelta,在那里你可以询问经过的时间。

d1 = datetime(2017, 1, 1) # create datetime at 2017-01-01T00:00

d0 = datetime.now()

diff = (d0 - d1).seconds

if diff > 30:

pass

datetime方法采用可选的tzinfo,您可以使用设置时区。这只是datetime.tzinfo

的子类

GMT +1的示例

 class GMT1(tzinfo):
     def utcoffset(self, dt):
         return timedelta(hours=1) + self.dst(dt)
     def dst(self, dt):
         # DST starts last Sunday in March
         d = datetime(dt.year, 4, 1)   # ends last Sunday in October
         self.dston = d - timedelta(days=d.weekday() + 1)
         d = datetime(dt.year, 11, 1)
         self.dstoff = d - timedelta(days=d.weekday() + 1)
         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
             return timedelta(hours=1)
         else:
             return timedelta(0)
     def tzname(self,dt):
          return "GMT +1"

然后你可以做

d0 = datetime(2017, 1, 1, tzinfo=GMT1())

答案 1 :(得分:0)

使用字符串

2017-01-13 14:12:18.307877+00:00

我们可以使用datetime.datetime.strptime函数生成一个datetime对象,然后我们可以用它进行时间算术。

首先,我们删除了最后一个:,因为datetime使用的时区格式为+0000而不是+00:00。然后我们将该字符串与格式字符串一起交给strptime

from datetime import datetime, timedelta
s = '2017-01-13 14:12:18.307877+00:00'
s = s[:-3]+s[-2:]
pat = '%Y-%m-%d %H:%M:%S.%f%z'
then = datetime.strptime(s, pat)
if datetime.now(then.tzinfo) - then < timedelta(0, 30): 
    print("It has been less than 30 seconds")