Làm cách nào để lấy ngày hiện tại và giờ hiện tại chỉ tương ứng trong Django?


81

Tôi đã gặp một tình huống thú vị khi sử dụng lớp này:

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

Django quyết định sử dụng DATETIME_INPUT_FORMATSđược xác định trong tệp format.py . Điều đó có ý nghĩa, bởi vì tôi đang vượt qua datetime.now()cả hai trường.

Tôi nghĩ rằng tôi có thể làm cho Django để sử dụng DATE_INPUT_FORMATSTIME_INPUT_FORMATStương ứng, nếu tôi chỉ thông qua ngày hiện tại và thời gian hiện tại trong.

Một cái gì đó như thế này:

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

Nhưng điều này rõ ràng ném ra một ngoại lệ vì bây giờ không tồn tại như vậy. Có cách nào khác để đạt được điều này không?

Câu trả lời:


146

Đối với ngày, bạn có thể sử dụng datetime.date.today()hoặc datetime.datetime.now().date().

Đối với thời gian, bạn có thể sử dụng datetime.datetime.now().time().


Tuy nhiên, tại sao lại có các trường riêng biệt cho những thứ này ngay từ đầu? Tại sao không sử dụng một DateTimeFieldcái?

Bạn luôn có thể xác định các hàm trợ giúp trên mô hình trả về .date()hoặc .time()sau đó nếu bạn chỉ muốn một hoặc cái kia.


Nó hoạt động Amber cảm ơn rất nhiều. :) Có thể chấp nhận trong 5 phút. Lý do tôi cần nó theo cách này là vì quốc tế hóa và nhận các định dạng ngày giờ của Mỹ được dịch sang phần còn lại của thế giới. :)
Houman

5
Để được hỗ trợ múi giờ, tôi nghĩ tốt hơn nên sử dụng DateTimeField để luôn lưu trữ ngày giờ UTC và sau đó chuyển ngày sang múi giờ hiện tại tại thời điểm truy vấn.
Joucks

@Kave Yeah, piouk đã nói gì. Sử dụng DateTimeField lưu trữ UTC và chỉ dịch sang múi giờ có liên quan (sử dụng một cái gì đó tương tự pytz) khi bạn hiển thị thời gian. Đây không chỉ là cách lưu trữ tốt hơn mà bạn còn được xử lý múi giờ miễn phí vì pytznó đã được viết cho bạn.
Amber

64
import datetime
datetime.datetime.now().strftime ("%Y%m%d")
20151015

Cho thời gian

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

25
import datetime

datetime.date.today()  # Returns 2018-01-15

datetime.datetime.now() # Returns 2018-01-15 09:00

2
Câu trả lời hay nhất cho đến nay!
Shougo Makishima

5
 import datetime

Ngày và giờ hiện tại

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

Chỉ ngày hiện tại

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

Chỉ năm hiện tại

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

Chỉ tháng hiện tại

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

Chỉ ngày hiện tại

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

0

Một cách khác để nhận ngày giờ UTC với mili giây.

from datetime import datetime

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

2020-10-29T14:46:37.655Z
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.