Django'da sırasıyla şu anki tarihi ve geçerli saati nasıl alabilirim?


81

Bu dersi kullanırken ilginç bir durumla karşılaştım:

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

Django DATETIME_INPUT_FORMATS, formatlar.py dosyasında tanımlananları kullanmaya karar verir . Bu mantıklı çünkü datetime.now()her iki alana da a geçiyorum .

Ben Django kullanmak yapabilir düşünmek DATE_INPUT_FORMATSve TIME_INPUT_FORMATSben sadece geçerli tarih ve geçerli saati geçirilen eğer, sırasıyla.

Bunun gibi bir şey:

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

Ama bu açıkça bir istisna yaratıyor, çünkü şimdi böyle var değil. Bunu başarmanın farklı bir yolu var mı?

Yanıtlar:


146

Tarih için datetime.date.today()veya kullanabilirsiniz datetime.datetime.now().date().

Zaman için kullanabilirsiniz datetime.datetime.now().time().


Ancak neden ilk etapta bunlar için ayrı alanlar olsun? Neden tek kullanmıyorsun DateTimeField?

Yalnızca birini veya diğerini istiyorsanız , model üzerinde her zaman .date()veya .time()daha sonra döndüren yardımcı işlevler tanımlayabilirsiniz .


Amber çok teşekkürler. :) 5 dakikada kabul edebilir. Buna bu şekilde ihtiyacımın nedeni, uluslararasılaşma ve Amerikan saat ve tarih formatlarının dünyanın geri kalanına çevrilmesi. :)
Houman

5
Saat dilimi desteği için, UTC tarih saatini her zaman depolamak için bir DateTimeField kullanmanın ve ardından tarihi sorgu zamanında geçerli saat dilimine aktarmanın daha iyi olduğunu düşünüyorum.
Joucks

@Kave Evet, piouk ne dedi. UTC'yi depolayan ve pytzsaati görüntülemeye gittiğinizde yalnızca ilgili saat dilimine (benzeri bir şey kullanarak ) çeviren bir DateTimeField kullanın . Bu sadece daha iyi bir depolama yöntemi olmakla kalmaz, aynı zamanda saat dilimi işlemlerini ücretsiz olarak alırsınız çünkü pytzzaten sizin için yazılmıştı.
Amber

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

Zaman için

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

Güncel Tarih ve saat

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

Yalnızca güncel tarih

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

Yalnızca cari yıl

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

Yalnızca cari ay

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

Yalnızca geçerli gün

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

1

Tarih saat UTC'yi milisaniye ile almanın başka bir yolu.

from datetime import datetime

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

2020-10-29T14:46:37.655Z

0

Soruyla ilgili bir bilgi ...

Django'da, timezone.now()django saat dilimini desteklediğinden , tarih saat alanı için kullanın , USE TZayarlara dayalı olarak yalnızca tarih saati döndürür veya yalnızca 'farkında' tarih saat nesneleri

Bir Referans için, bende TIME_ZONE = 'Asia/Kolkata've 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

bakınız saat dilimi ayarlarını ve Internationalization ve yerelleştirme fazla ayrıntı için Django docs.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.