【问题标题】:How do I convert a datetime to date?如何将日期时间转换为日期?
【发布时间】:2011-04-14 04:20:40
【问题描述】:

如何在 Python 中将datetime.datetime 对象(例如datetime.datetime.now()) 的返回值转换为datetime.date 对象?

【问题讨论】:

  • 如果你只需要datetime.datetime.now()这个,请注意有一个方法datetime.date.today()
  • 如果您已经导入了日期时间,例如from datetime import datetime你可以添加日期from datetime import datetime, date

标签: python datetime


【解决方案1】:

使用date() 方法:

datetime.datetime.now().date()

【讨论】:

  • 获取 UTC 非常有帮助 --> datetime.datetime.utcnow() 和相应的 datetime.datetime.utcnow().date()
  • 谢谢@SeanColombo,特定时区的当前日期应该是datetime.datetime.now(pytz.timezone('US/Pacific')).date()
  • datetime.datetime.utcnow() 已弃用,请参阅docs.python.org/3/library/datetime.html#datetime.datetime 替换为 datetime.now(timezone.utc)。 OP 实际上是在日期之后,所以这是没有实际意义的。
  • 给定from datetime import datetime, date, timezone 和一个使用具有非零偏移量的时区,那么datetime.now(timezone.utc).date() 可以datetime.now().date() 不同(后者也可用作@ 987654331@).
【解决方案2】:

来自文档:

datetime.datetime.date()

返回具有相同年月日的日期对象。

【讨论】:

    【解决方案3】:

    你使用datetime.datetime.date()方法:

    datetime.datetime.now().date()
    

    显然,上面的表达式可以(并且应该恕我直言:)写成:

    datetime.date.today()
    

    【讨论】:

    • 公平地说,这个答案(使用.today())对于所述示例问题来说是最pythonic的。
    • 如果您使用今天,比较日期时要小心。 today() 也有一个小时 组件。所以如果你这样做:losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')然后if losdat < datetime.datetime.today():它总是正确的,因为losdat会有一个午夜的时间分量,它将落在today()的时间戳之前。
    • @DennisDecoene:当人们想要一个datetime.date 对象时,为什么要使用datetime.datetime.today() 而不是datetime.date.today()
    • @tzot 是的,这也是我想指出但不清楚的地方。
    【解决方案4】:

    您可以使用日期时间对象的date()方法将日期时间对象转换为日期,如下:

    <datetime_object>.date()
    

    【讨论】:

      【解决方案5】:

      您可以为 (今天的日期和当天的名称和小时) 输入此代码表单: datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

      '19-09-09 周一 17:37:56'

      并输入此代码(简单的今天日期)datetime.date.today().strftime('%y-%m-%d') '19-09-10'

      对象: datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()

      【讨论】:

      【解决方案6】:

      答案已更新至 Python 3.7 及更多版本

      以下是如何转换日期和时间对象

      (又名datetime.datetime 对象,存储在models.DateTimeField django model field 中的对象)

      到一个日期对象(又名datetime.date对象):

      from datetime import datetime
      
      #your date-and-time object
      # let's supposed it is defined as
      datetime_element = datetime(2020, 7, 10, 12, 56, 54, 324893)
      
      # where
      # datetime_element = datetime(year, month, day, hour, minute, second, milliseconds)
      
      # WHAT YOU WANT: your date-only object
      date_element = datetime_element.date()
      

      为了清楚起见,如果您打印这些元素,输出如下:

      print(datetime_element)
      

      2020-07-10 12:56:54.324893


      print(date_element)
      

      2020-07-10

      【讨论】:

        【解决方案7】:
        import time
        import datetime
        
        # use mktime to step by one day
        # end - the last day, numdays - count of days to step back
        def gen_dates_list(end, numdays):
          start = end - datetime.timedelta(days=numdays+1)
          end   = int(time.mktime(end.timetuple()))
          start = int(time.mktime(start.timetuple()))
          # 86400 s = 1 day
          return xrange(start, end, 86400)
        
        # if you need reverse the list of dates
        for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)):
            print datetime.datetime.fromtimestamp(dt).date()
        

        【讨论】:

        • 您是要在此处发布此答案吗?在我看来,您的回答是针对不同的问题。
        【解决方案8】:

        我使用 data.strftime('%y-%m-%d') 和 lambda 将列转移到日期

        【讨论】:

          猜你喜欢
          • 2010-11-03
          • 1970-01-01
          • 1970-01-01
          • 2014-07-01
          • 1970-01-01
          • 2011-10-05
          相关资源
          最近更新 更多