【问题标题】:comparing unix timestamps in python比较python中的unix时间戳
【发布时间】:2014-04-19 15:58:40
【问题描述】:

我的应用程序需要比较两个 unix 时间戳之间的差异并返回 True 或 False。总之,如果用户在尝试评分的一天或一周内进行了评分,则该函数返回 false。我担心这可能不是很pythonic,而且我可能重新发明了轮子。 python 2.5 中是否有一个预打包的库可以帮助我以更好的方式达到同样的结果?

import time

def is_allowed(time_rated, duration):
    durations={'day': 86400, 'week': 604800}
    if duration in durations and isinstance(time_rated, int):
        time_difference = int(time.time()) - time_rated
        if  time_difference > durations[duration]:
            return True
        else:
            return False
    return False

【问题讨论】:

  • 不使用time_difference时为什么要评价它?此外,您可以删除else: return False,因为这是默认情况。
  • 抱歉,我稍微编辑了我的帖子。我确实使用它。很好的收获。

标签: python time unix-timestamp duration


【解决方案1】:

不,你在这里做得很好,但你可以返回 > 比较的结果,它已经给你一个布尔值。这里也不需要将time.time() 浮点数转为整数:

def is_allowed(time_rated, duration):
    durations = {'day': 86400, 'week': 604800}
    if duration in durations and isinstance(time_rated, int):
        time_difference = time.time() - time_rated
        return time_rated > durations[duration]
    return False

您可以通过默认为float('inf')duration 来进一步简化此操作,从而为您节省if 测试:

def is_allowed(time_rated, duration):
    if not isinstance(time_rated, int):
        return False
    duration = {'day': 86400, 'week': 604800}.get(duration, float('inf'))
    return time.time() - time_rated > duration

这将返回 False 如果:

  • time_rated 不是整数
  • duration 不等于 'day''week'(因为没有任何数字大于 float('inf'))。
  • time_rated 小于 86400 或 604800 秒前,具体取决于 duration

【讨论】:

  • 你能解释一下为什么重构的代码(代码块#2)if isinstance(time_rated, int): return False 是有效的吗?乍一看,如果 time_rated 是一个 unix 时间戳(例如 1394797042),它似乎会返回 False。
  • @user1645914:您的原始版本要求 isinstance(time_rated, int)True。如果不是True,则您的if 语句不匹配,您的函数将返回False。如果time_rated 可以是浮点数,只需完全删除整个if 语句。
  • @user1645914:所以,tl;dr:您的代码将time_rated 限制为int 以及。如果您不希望这样,请删除测试。
  • 所以第一个带有return time_rated > durations[duration] 而不是return time_rated > durations[duration]: 的代码块运行良好。如果我对尾随冒号有误,请纠正我。但是,如果用户输入is_allowed('string','day'),第二个代码块会中断 [TypeError]。
  • @user1645914:啊!我没注意,看来。是的,冒号是一个编辑错误,第二个版本缺少一个重要的not。 Mea Culpa,已更正。
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多