【问题标题】:Comparing dates and times in different formats using Python使用 Python 比较不同格式的日期和时间
【发布时间】:2011-03-28 07:30:13
【问题描述】:

我在一个文件中有以下格式的行。

摘要;会议;说明;无;开始日期;20100629T110000;日期结束;20100629T120000;时间;20100805T084547Z

我需要创建一个有两个输入的函数:时间和日期,格式如下:时间:HH:MM,日期为 mmddyyyy。 (这些是字符串)。现在函数需要读取这一行并查看输入的日期和时间是否位于 DateStart(20100629T11000) 和 DateEnd(20100629T120000) 之间。由于输入和行中的日期和时间格式有两种格式,我该如何处理?

【问题讨论】:

    标签: python date time


    【解决方案1】:

    你可以parse a string into a datetime with strptime:

    >>> datetime.datetime.strptime('20100629T110000', '%Y%m%dT%H%M%S')
    datetime.datetime(2010, 6, 29, 11, 0)
    >>> datetime.datetime.strptime('23:45 06192005', '%H:%M %m%d%Y')
    datetime.datetime(2005, 6, 19, 23, 45)
    

    然后您可以比较(<<= 等)这两个日期时间。

    【讨论】:

    • 您好 Kenny,您使用的是什么版本的 Python。我使用的是 2.4,并且我已经导入了所有必需的,但是在使用 datetime.datetime.strptime 时出现错误。
    • @user: datetime.strptime 自 2.5 起可用,如链接所示。您可以使用time.strptime,但 API 不太面向对象。为什么不升级到 Python 2.7?
    • 非常感谢,刚刚安装了 2.7,让我的生活变得如此轻松!
    【解决方案2】:

    要处理日期和时间,请使用 Python 的 datetime 模块。该模块中的datetime 类有一个从字符串中读取日期时间的方法,称为strptime。所以你可以这样做:

    # read the file, so that:
    strStart = "20100629T110000"
    strEnd = "20100629T120000"
    imTime = "HH:MM"
    inDate = "mmddyyyy"
    
    import datetime
    dateStart = datetime.datetime.strptime( strStart, "%Y%m%dT%H%M%S" )
    dateEnd = datetime.datetime.strptime( strEnd, "%Y%m%dT%H%M%S" )
    dateIn = datetime.datetime.strptime( inDate + inTime, "%m%d%Y%H:%M" )
    
    assert dateStart < dateIn < dateEnd
    

    注意您可以使用csv 读取文件。

    【讨论】:

      【解决方案3】:

      datetime 模块中使用datetime 类。尽管您可能需要调整边界条件,但这里有一个功能可以满足您的需求:

      from datetime import datetime
      def f(row, datestr, timestr):
          tmp = row.split(";")
          start = datetime.strptime(tmp[5], "%Y%m%dT%H%M%S")
          end = datetime.strptime(tmp[7], "%Y%m%dT%H%M%S")
          mytimestamp = datetime.strptime(datestr+timestr, "%d%m%Y%H:%M")
          if (start < mytimestamp and mytimestamp < end):
              print "inside"
          else:
              print "not inside"
      
      >>> f("Summary;meeting;Description;None;DateStart;20100629T110000;DateEnd;20100629T120000;Time;20100805T084547Z", "29062010", "11:00")
      not inside
      >>> f("Summary;meeting;Description;None;DateStart;20100629T110000;DateEnd;20100629T120000;Time;20100805T084547Z", "29062010", "11:30")
      inside
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 2017-09-22
        相关资源
        最近更新 更多