Python'da YYYY-AA-GG'de bugünün tarihini mi alıyorsunuz?


326

Kullanıyorum:

str(datetime.datetime.today()).split()[0]

bugünün tarihini YYYY-MM-DDbiçiminde döndürmek için .

Bunu başarmanın daha az kaba bir yolu var mı?


3
"Ham" ile ne demek istiyorsun?
Gombat

4
belki bu? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat

3
@Gombat Ne demek benim deneyim, bölünmüş, endeks, concat gerek kalmadan Python'da istediğiniz şeyi almanın şekilde inşa vb katılmak bir çoğunlukla orada olan
Pyderman

Yanıtlar:


604

Strftime kullanabilirsiniz :

from datetime import datetime

datetime.today().strftime('%Y-%m-%d')

Ayrıca, sonunda sıfır dolgulu Saat, Dakika ve Saniye arayan herkes için: ( Gabriel Staples tarafından yapılan yorum )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')

Orada "% x" çalışacağına dair güçlü bir olasılık da ... ama bu bağımlı yerel olduğunu
Joran Beasley

19
Ayrıca sonunda sıfır dolgulu Saat, Dakika ve İkinci arayanlar için:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples

sadece nasıl time.strftime("%Y-%m-%d")?
aderchox

UTC tarihi için:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

Buna dikkat dateetmenin yanı sıra bu da mevcutdatetime
dummyDev

116

datetime.date.today()Ortaya çıkan datetime.datenesneyi kullanabilir ve bir dizeye dönüştürebilirsiniz :

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'

Ayırıcıyı değiştirmek mümkün müdür /?
Stevoisiak

3
@StevenVascellaro olurdudate.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro Kötü fikir. Okuyucu, normal olarak ayırıcı kabul .'GAY', ayırıcıya /için M/D/Yve separatör -için Y-M-D. Herkes bu yönergelere uymasa da, herkes geçmediği sürece uluslararası tarihlerin okunmasına yardımcı olacaktır Y-M-D.
glglgl

1
@glglgl Amerikan tarih formatı m / d / y olduğunu varsayan bir api ile çalışıyorum. Uygulamamın sırasını zaten değiştirdim.
Stevoisiak

1
@glglgl Evet, m / d / y kullanıyorum
Stevoisiak

35

Komik kodları hatırlamayı seviyorsanız, tarih sadece güzel. Basitliği tercih etmez misiniz?

>>> import arrow
>>> arrow.now().format('YYYY-MM-DD')
'2017-02-17'

Bu modül ne demek istediğinizi anlayacak kadar zekidir .

Sadece yap pip install arrow.

Zeyilname: Bu cevap üzerinden yapılanlara cevap olarak, okun Python'daki tarihlerle başa çıkmak için alternatif yaklaşımlardan birini temsil ettiğini söyleyeyim . Daha çok önermek istediğim buydu.


17
bunun gibi basit bir görev için, yerleşik kütüphane bunu basitçe yapabildiği zaman neden başka bir kütüphane kullanmalısınız? Tabii ki, eğer kullanıcının çok sayıda {time, date} ile ilgili fonksiyona ihtiyacı varsa, yeni bir kütüphane getirmek mantıklıdır.
kmonsoor

2
beni ikinci kod satırını okurken güldürdün. nasıl daha iyi print(date.today())>> "2018-12-16" ?? lol ve kolayca int değerleri almak t.year,t.month,t.day+1>> (2018, 12, 17) nerede t = date.today()ve aslında onlara zaman söylemek için yeşil ok aramak zorunda değilsiniz. aman tanrım bu hatırlamak çok fazla kod ... olduğunu
Puddle

1
@ Su birikintisi: Çok komik.
Bill Bell

@kmonsoor import datetimeFarkı import arrownedir? Tabii ki yerleşiktir, ancak arrowdaha uygun bir format sağlarsa , neden kullanmıyorsunuz?
information_interchange

1
@ info_interchange sorunuzu zaten yanıtladınız. Dahili vs değil. Birinin bu ekstra şeylere ihtiyacı varsa, neden olmasın arrow? Ancak, birçok basit proje için, sadece gereksiz. Ayrıca, birçok şirket içi projede, ppl yeni kütüphaneleri dahil etmek için onay almalıdır.
kmonsoor

30

Bunun için daima isoformat()fonksiyonu kullanırım .

from datetime import date    
today = date.today().isoformat()
print(today) # '2018-12-05'

Ayrıca, standart biçimde zamana ihtiyacınız varsa datetime nesnelerinde de çalıştığını unutmayın.

from datetime import datetime
now = datetime.today().isoformat()
print(now) # '2018-12-05T11:15:55.126382'

15

Diğer yanıtlar datetime.datetimepython'ların kullanılmasını önermektedir , ancak @ Bill Bell'in dediği datetimegibi, hizmet olarak veya daha büyük bir API ekosisteminin parçası olarak daha basit arayüzler sunan başka kütüphaneler de vardır . İşte çalışmayı datetimesçok basitleştiren iki kütüphane .

PANDAS

Sen kullanabilirsiniz pd.to_datetimegelen panda kütüphanesine. Geri dönmek istediğiniz şeye bağlı olarak çeşitli seçenekler.

import pandas as pd

pd.to_datetime('today')  # pd.to_datetime('now')
# Timestamp('2019-03-27 00:00:10.958567')

Bir python datetime nesnesi olarak,

pd.to_datetime('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 50, 42, 587629)

Biçimlendirilmiş bir tarih dizesi olarak,

pd.to_datetime('today').isoformat()
# '2019-04-18T04:03:32.493337'

# Or, `strftime` for custom formats.
pd.to_datetime('today').strftime('%Y-%m-%d')
# '2019-03-27'

Zaman damgasından yalnızca tarihi almak için arayın Timestamp.date.

pd.to_datetime('today').date()
# datetime.date(2019, 3, 27)

Bunun dışında to_datetime, bir Timestampnesneyi doğrudan kullanarak,

pd.Timestamp('today')  # pd.Timestamp('now')
# Timestamp('2019-04-18 03:43:33.233093')

pd.Timestamp('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 53, 46, 220068)

Zaman Damgası saat diliminizi haberdar etmek istiyorsanız, tztartışmaya bir saat dilimi iletin.

pd.Timestamp('now', tz='America/Los_Angeles')
# Timestamp('2019-04-18 03:59:02.647819-0700', tz='America/Los_Angeles')

SARKAÇ

Sarkaçla çalışıyorsanız , bazı ilginç seçenekler var. Geçerli zaman damgasını kullanarak now()veya günün tarihini kullanarak alabilirsiniz today().

import pendulum 

pendulum.now()
# DateTime(2019, 3, 27, 0, 2, 41, 452264, tzinfo=Timezone('America/Los_Angeles'))

pendulum.today()
# DateTime(2019, 3, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Ayrıca, aynı zamanda alabilirsiniz tomorrow()veya yesterday()bireyin tarih doğrudan herhangi bir ek timedelta aritmetik yapmaya gerek kalmadan.

pendulum.yesterday()
# DateTime(2019, 3, 26, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

pendulum.tomorrow()
# DateTime(2019, 3, 28, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Çeşitli biçimlendirme seçenekleri mevcuttur.

pendulum.now().to_date_string()
# '2019-03-27'

pendulum.now().to_formatted_date_string()
# 'Mar 27, 2019'

pendulum.now().to_day_datetime_string()
# 'Wed, Mar 27, 2019 12:04 AM'

3
Harika haber pandaları da var!
ZygD

1
Bu gerçekten harika, özellikle de pandalar üzerinde çalışırken
loveR

Pandaları kullanıyorsanız ve bir str'ye dönüştürmek istemiyorsanız pd.to_datetime (day) .date () yararlıdır. Teşekkürler!
Brndn

4

Çok geç cevap, ancak şunları kullanabilirsiniz:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14

1
teşekkür ederim, bu en temiz olanı.
Barbaros Özhan


-5

Bunu tercih ederim, çünkü bu basit, ama belki bir şekilde verimsiz ve buggy. Eğer bir İstersen kabuk komutun çıkış kodu kontrol edilmelidir kuvvetle hata geçirmez bir program.

os.system('date +%Y-%m-%d')

4
Bu, bir tarihi biçimlendirmek yerine yalnızca sistem tarih komutunun ne döndüreceğini kontrol etmek amacıyla kullanılmalıdır. Bu, çıkış kodu kontrolü dışında çeşitli nedenlerden kaynaklanmaktadır. 1. Taşınabilir değil. Windows'ta tarih komutu tarihi 2 ayarlar . Verimsiz. Daha sonra komutu ayrıştırmak, bulmak ve yürütmek, çıktıyı geri döndürmek ve daha sonra bu kabuğu 3 yok etmek zorunda olan bir kabuk oluşturmak zorundadır. bu kodu gören dile yeni gelenleri de yanıltabilir
Captain Lepton
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.