Mendapatkan tanggal hari ini di YYYY-MM-DD dengan Python?

326

Saya menggunakan:

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

untuk mengembalikan tanggal hari ini dalam YYYY-MM-DDformat.

Apakah ada cara yang kurang kasar untuk mencapai ini?

Pyderman
sumber
3
Apa maksudmu dengan "kasar"?
Gombat
4
mungkin ini? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat
3
@ Gombat Yang saya maksud adalah dalam pengalaman saya, biasanya ada cara yang dibangun untuk mendapatkan hal yang kita inginkan dengan Python tanpa harus membelah, mengindeks, concat, bergabung dll.
Pyderman

Jawaban:

604

Anda dapat menggunakan strftime :

from datetime import datetime

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

Selain itu, bagi siapa pun yang mencari Jam, Menit, dan Kedua di bagian akhir: (Komentar oleh Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
diegueus9
sumber
ada juga kemungkinan kuat bahwa "% x" akan berfungsi ... tapi itu tergantung pada lokasi
Joran Beasley
19
Bagi siapa pun yang mencari Jam tanpa-empuk, Menit, dan Kedua di akhir:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples
bagaimana kalau saja time.strftime("%Y-%m-%d")?
aderchox
Untuk tanggal UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro
Perlu dicatat bahwa dateini tersedia jugadatetime
dummyDev
116

Anda dapat menggunakan datetime.date.today()dan mengonversi datetime.dateobjek yang dihasilkan menjadi string:

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'
kmonsoor
sumber
Apakah mungkin untuk mengubah pemisah /?
Stevoisiak
3
@StevenVascellarodate.today().strftime('%Y/%m/%d')
kmonsoor
2
@StevenVascellaro Gagasan buruk. Pembaca biasanya mengasumsikan pemisah .menjadi 'DMY', pemisah /untuk M/D/Ydan pemisah -untuk Y-M-D. Meskipun tidak semua orang mengikuti pedoman ini, itu akan membantu membaca tanggal secara internasional selama tidak semua orang beralih ke Y-M-D.
glglgl
1
@glglgl Saya bekerja dengan api yang mengasumsikan format tanggal Amerika m / d / y. Saya sudah mengubah urutan dalam aplikasi saya.
Stevoisiak
1
@glglgl Ya, saya menggunakan m / d / y
Stevoisiak
35

Datetime hanya indah jika Anda suka mengingat kode lucu. Tidakkah Anda lebih suka kesederhanaan?

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

Modul ini cukup pintar untuk memahami apa yang Anda maksud .

Lakukan saja pip install arrow.

Tambahan: Sebagai jawaban bagi mereka yang menjadi berolahraga atas jawaban ini izinkan saya hanya mengatakan bahwa panah merupakan salah satu pendekatan alternatif untuk berurusan dengan tanggal dengan Python. Itu sebagian besar yang saya maksudkan.

Bill Bell
sumber
17
untuk tugas sederhana seperti ini, mengapa menggunakan pustaka lain saat pustaka bawaan dapat melakukannya dengan mudah. Tentu saja, jika pengguna membutuhkan banyak fungsi terkait {time, date} lainnya, memasukkan perpustakaan baru masuk akal.
kmonsoor
2
Anda membuat saya tertawa ketika membaca kode baris ke-2 itu. Bagaimana itu lebih baik dari print(date.today())>> "2018-12-16" ?? lol dan mudah mendapatkan nilai int t.year,t.month,t.day+1>> (2018, 12, 17) di mana t = date.today()dan fakta orang tidak perlu memanggil panah hijau untuk memberi tahu mereka waktu. oh Tuhan, ini terlalu banyak kode untuk diingat ...
Puddle
1
@Puddle: Lucu.
Bill Bell
@kmonsoor Bagaimana import datetimebedanya dengan import arrow? Tentu ada yang built-in, tetapi jika arrowmenyediakan format yang lebih nyaman, mengapa tidak menggunakannya?
information_interchange
1
@information_interchange Anda sudah menjawab pertanyaan Anda. Built-in vs not. Jika seseorang membutuhkan barang-barang ekstra itu, tentu, mengapa tidak arrow? Tapi, untuk banyak proyek sederhana, itu tidak perlu. Juga, di banyak proyek internal perusahaan, ppl perlu mendapatkan persetujuan untuk memasukkan perpustakaan baru.
kmonsoor
30

Saya selalu menggunakan isoformat()fungsi untuk ini.

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

Perhatikan bahwa ini juga berfungsi pada objek datetime jika Anda memerlukan waktu dalam format standar juga.

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

Jawaban lain menyarankan penggunaan python datetime.datetime, tetapi seperti yang dikatakan @Bill Bell, ada perpustakaan lain yang menawarkan datetimeantarmuka yang lebih sederhana baik sebagai layanan atau sebagai bagian dari ekosistem API yang lebih besar. Berikut adalah dua perpustakaan yang membuat bekerja dengan datetimessangat sederhana.

PANDAS

Anda dapat menggunakan pd.to_datetimedari panda library. Berikut adalah berbagai opsi, tergantung pada apa yang Anda inginkan dikembalikan.

import pandas as pd

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

Sebagai objek datetime python ,

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

Sebagai string tanggal yang diformat,

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'

Untuk mendapatkan hanya tanggal dari cap waktu, hubungi Timestamp.date.

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

Selain itu to_datetime, Anda dapat langsung instantiate Timestampobjek menggunakan,

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)

Jika Anda ingin membuat zona waktu Timestamp Anda sadar, berikan zona waktu ke tzargumen.

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

BANDUL

Jika Anda bekerja dengan pendulum , ada beberapa pilihan menarik. Anda bisa mendapatkan cap waktu saat ini menggunakan now()atau menggunakan tanggal hari ini 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'))

Selain itu, Anda juga bisa mendapatkan tomorrow()atau yesterday()tanggal 's langsung tanpa harus melakukan timedelta tambahan aritmatika.

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'))

Ada berbagai opsi pemformatan yang tersedia.

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'
cs95
sumber
3
Panda kabar besar juga memilikinya!
ZygD
1
Yang ini benar-benar luar biasa, khususnya ketika seseorang mengerjakan panda
loveR
pd.to_datetime (hari) .date () berguna jika Anda menggunakan panda dan tidak ingin mengonversi ke str. Terima kasih!
Brndn
4

Jawaban sangat terlambat, tetapi Anda dapat menggunakan:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14
HUBUNGI19
sumber
1
terima kasih, ini yang terbersih.
Barbaros Özhan
2

Kamu bisa memakai,

>>> from datetime import date
>>> date.today().__str__()
'2019-10-05'
Mohideen bin Mohammed
sumber
2
mungkin str(date.today())masih lebih baik
information_interchange
ini adalah salinan dari jawaban ini stackoverflow.com/a/47984538
Boris
-5

Saya lebih suka ini, karena ini sederhana, tetapi mungkin entah bagaimana tidak efisien dan buggy. Anda harus memeriksa kode keluar dari perintah shell jika Anda ingin program yang sangat tahan kesalahan.

os.system('date +%Y-%m-%d')
plhn
sumber
4
Ini harus digunakan hanya untuk tujuan memeriksa apa yang akan kembali perintah tanggal sistem, daripada benar-benar memformat tanggal. Ini karena beberapa alasan selain dari pemeriksaan kode keluar. 1. Tidak portabel. Perintah tanggal pada Windows menetapkan tanggal 2. Tidak efisien. Itu harus membuat seluruh shell, yang kemudian harus menguraikan, menemukan dan mengeksekusi perintah, mengembalikan output, dan kemudian menghancurkan shell itu 3. Ini hanya unpythonic - ini menunjukkan bahwa Anda tidak tahu perpustakaan fundamental terkenal, dan mungkin juga menyesatkan pendatang baru ke bahasa yang melihat kode itu
Kapten Lepton