【问题标题】:How do I get the current date and current time only respectively in Django?如何在 Django 中分别获取当前日期和当前时间?
【发布时间】:2012-08-15 08:12:42
【问题描述】:

我在使用这个类时遇到了一个有趣的情况:

class Company(models.Model):
    date = models.DateField()
    time = models.TimeField()
c = Company(date=datetime.datetime.now(), time=datetime.datetime.now()) 

Django 决定使用 formats.py 文件中定义的DATETIME_INPUT_FORMATS。 这是有道理的,因为我将datetime.now() 传递给这两个字段。

如果我只传入当前日期和当前时间,我想我可以让 Django 分别使用 DATE_INPUT_FORMATSTIME_INPUT_FORMATS

类似这样的:

c = Company(date=datetime.date.now(), time=datetime.time.now()) 

但这显然会引发异常,因为现在不存在这样的情况。有没有其他方法可以实现这一目标?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    对于日期,您可以使用datetime.date.today()datetime.datetime.now().date()

    暂时可以使用datetime.datetime.now().time()


    但是,为什么首先要为这些设置单独的字段?为什么不使用单个DateTimeField

    如果您只需要其中一个,您始终可以在模型上定义稍后返回 .date().time() 的辅助函数。

    【讨论】:

    • 非常感谢 Amber。 :) 可以在 5 分钟内接受。我需要这种方式的原因是因为国际化以及将美国时间和日期格式翻译到世界其他地方。 :)
    • 对于时区支持,我认为最好使用 DateTimeField 始终存储 UTC 日期时间,然后在查询时将日期转换为当前时区。
    • @Kave 是的,piouk 说的。使用存储 UTC 的 DateTimeField 并仅在您显示时间时转换为相关时区(使用 pytz 之类的东西)。这不仅是一种更好的存储方式,而且您还可以免费处理时区,因为 pytz 已经为您编写好了。
    【解决方案2】:
    import datetime
    datetime.datetime.now().strftime ("%Y%m%d")
    20151015
    

    暂时

    from time import gmtime, strftime
    showtime = strftime("%Y-%m-%d %H:%M:%S", gmtime())
    print showtime
    2015-10-15 07:49:18
    

    【讨论】:

      【解决方案3】:
      import datetime
      
      datetime.date.today()  # Returns 2018-01-15
      
      datetime.datetime.now() # Returns 2018-01-15 09:00
      

      【讨论】:

      • 迄今为止最好的答案!
      【解决方案4】:
       import datetime
      

      当前日期和时间

           print(datetime.datetime.now())
           #2019-09-08 09:12:12.473393
      

      仅限当前日期

           print(datetime.date.today())
           #2019-09-08
      

      仅限当年

           print(datetime.date.today().year)
           #2019
      

      仅当月

           print(datetime.date.today().month)
           #9
      

      仅限当天

           print(datetime.date.today().day)
           #8
      

      【讨论】:

        【解决方案5】:

        以毫秒为单位获取日期时间 UTC 的另一种方法。

        from datetime import datetime
        
        datetime.utcnow().isoformat(sep='T', timespec='milliseconds') + 'Z'
        
        2020-10-29T14:46:37.655Z
        

        【讨论】:

          【解决方案6】:

          问题的相关信息...

          在 django 中,使用 timezone.now() 作为日期时间字段,因为 django 支持 timezone,它只是根据 USE TZ 设置返回日期时间,或者只是时区“感知”日期时间对象

          作为参考,我有 TIME_ZONE = 'Asia/Kolkata'USE_TZ = True

          from django.utils import timezone
          import datetime
          
          print(timezone.now())  # The UTC time
          print(timezone.localtime())  # timezone specified time, 
          print(datetime.datetime.now())  # default local time
          
          # output
          2020-12-11 09:13:32.430605+00:00
          2020-12-11 14:43:32.430605+05:30  # IST is UTC+5:30
          2020-12-11 14:43:32.510659
          

          请参阅 django 文档中的 timezone settingsInternationalization and localization 了解更多详细信息。

          【讨论】:

            猜你喜欢
            • 2015-11-12
            • 2020-04-26
            • 2011-01-01
            • 2012-12-04
            • 1970-01-01
            • 2010-10-03
            • 2019-08-13
            • 2017-10-05
            相关资源
            最近更新 更多