【问题标题】:Diff between time string and current time without year时间字符串和没有年份的当前时间之间的差异
【发布时间】:2018-04-27 18:05:57
【问题描述】:

我想确定日期字符串和当前时间之间的差异。 问题是时间字符串不包含年份(但当前日期时间包含,所以年份更改会麻烦吗?)

这是我当前的代码:

date_parsed = datetime.strptime('Fri Apr 27 19:09:53', '%a %b %d %H:%M:%S')
current_time = datetime.now()

【问题讨论】:

  • 那么从传入的字符串中假定的年份是什么,即当前年份?您为什么要提出更改年份的案例,该字符串会代表上一年的日期吗?
  • 它应该假设年份1900,您需要更改它。
  • @CoryKramer 这可能是。我正在分析一个日志文件(尾部),当我比较上一年的一行时,例如新年后几秒钟,如果我将格式化字符串的年份设置为当前年份,这将以 12 个月的差异结束。

标签: python python-2.7 date difference


【解决方案1】:

我们可以假设date_parsed 发生在过去 365 天,对吧?

在这种情况下,使用.replace() 更改该日期的年份,将其与当前日期进行比较,并根据该比较的结果调整年份:如果日期在现在之后,那么解析的日期应该适应一下,否则没关系:

from datetime import datetime

current_time = datetime.now()
date_parsed = datetime.strptime('Fri Apr 27 14:09:53', '%a %b %d %H:%M:%S').replace(year=current_time.year)

if date_parsed > current_time:
  date_parsed = date_parsed.replace(year=current_time.year - 1)

print(date_parsed, current_time, current_time - date_parsed)

例如带有“过去”的日期:

2018-04-27 14:09:53 2018-04-27 18:28:10.484371 4:18:17.484371

例如在“未来”中有一个日期:

2017-04-30 14:09:53 2018-04-27 18:30:48.864598 362 days, 4:20:55.864598

【讨论】:

    【解决方案2】:

    可以使用total_seconds 和模算术来做到这一点,但我认为您在闰年之类的问题上存在问题。可能最好的方法是尝试两种替代方法:

    tdiff = current_time - date_parsed.replace(year=current_time.year)
    if tdiff.days < 0:
      tdiff = current_time - date_parsed.replace(year=current_time.year-1)
    

    【讨论】:

      【解决方案3】:

      您可以使用.strftime() 方法来同步您的string timecurrent time,如下所示:

      from datetime import datetime
      
      
      date_parsed = datetime.strptime('Fri Apr 27 19:09:53', '%a %b %d %H:%M:%S')
      current_time = datetime.now().strftime("%m-%d %H:%M:%S")
      
      date_ = date_parsed.strftime("%m-%d %H:%M:%S")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        • 1970-01-01
        • 2014-03-05
        • 2011-12-10
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多