Як отримати поточну дату та поточний час лише відповідно в Django?


81

Я зіткнувся з цікавою ситуацією, використовуючи цей клас:

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

Django вирішує використовувати DATETIME_INPUT_FORMATSвизначений у файлі formatats.py файл. Що має сенс, бо я переходжу datetime.now()до обох полів.

Я думаю, що я міг би змусити Django використовувати DATE_INPUT_FORMATSі TIME_INPUT_FORMATSвідповідно, якби я ввів лише поточну дату та поточний час у.

Щось на зразок цього:

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

Але це, очевидно, створює виняток, оскільки зараз такого не існує. Чи існує інший спосіб цього досягти?

Відповіді:


146

Для дати ви можете використовувати datetime.date.today()або datetime.datetime.now().date().

На час ви можете використовувати datetime.datetime.now().time().


Однак чому взагалі існують окремі поля для них? Чому б не використовувати сингл DateTimeField?

Ви завжди можете визначити допоміжні функції на моделі, які повертають .date()або .time()пізніше, якщо ви хочете лише те чи інше.


Це працює Amber велике спасибі. :) Можна прийняти через 5 хв. Причина, по якій мені це потрібно, полягає в інтернаціоналізації та перекладі американських форматів часу та дат у решту світів. :)
Гуман

5
Для підтримки часового поясу, я думаю, все-таки краще використовувати DateTimeField, щоб завжди зберігати дату і час UTC, а потім транспонувати дату до поточного часового поясу під час запиту.
Джоукс

@Kave Так, що сказав piouk. Використовуйте DateTimeField, який зберігає UTC, і перекладайте у відповідний часовий пояс (використовуючи щось на зразок pytz), коли ви йдете, щоб відобразити час. Це не тільки кращий спосіб зберігання, але ви також отримуєте безкоштовну обробку часового поясу, оскільки pytzце вже написано для вас.
Бурштин

64
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


6
 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

1

Ще один спосіб отримати дату і час UTC з мілісекундами.

from datetime import datetime

datetime.utcnow().isoformat(sep='T', timespec='milliseconds') + 'Z'

2020-10-29T14:46:37.655Z

0

Відповідна інформація, до питання ...

У django використовуйте timezone.now()для поля datetime, оскільки django підтримує часовий пояс , він просто повертає datetime на основі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 для отримання детальної інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.