Bagaimana cara mengonversi datetime ke tanggal (dengan Python)?

646

Bagaimana cara mengonversi datetime.datetimeobjek (misalnya, nilai pengembalian datetime.datetime.now())ke datetime.dateobjek dengan Python?

niklasfi
sumber
16
Jika Anda hanya memerlukan ini untuk datetime.datetime.now(), harap dicatat bahwa ada metode datetime.date.today().
Thierry J.
jika Anda sudah mengimpor datetime misalnya from datetime import datetimeAnda bisa menambahkan tanggalfrom datetime import datetime, date
Josh

Jawaban:

985

Gunakan date()metode:

datetime.datetime.now().date()
ars
sumber
14
Untuk masuk ke UTC yang bisa sangat membantu -> datetime.datetime.utcnow()dan jugadatetime.datetime.utcnow().date()
Nick Brady
2
Terima kasih @SeanColombo, tanggal saat ini di zona waktu tertentu seharusnyadatetime.datetime.now(pytz.timezone('US/Pacific')).date()
Monica For CEO
132

Dari dokumentasi:

datetime.datetime.date()

Objek tanggal pengembalian dengan tahun, bulan, dan hari yang sama.

Peter Mortensen
sumber
62

Anda menggunakan datetime.datetime.date()metode ini:

datetime.datetime.now().date()

Jelas, ungkapan di atas dapat (dan harus IMHO :) ditulis sebagai:

datetime.date.today()
tzot
sumber
14
jangan membingungkan pria itu.
fiatjaf
1
Agar adil, jawaban ini (menggunakan .today()) adalah yang paling pythonic untuk contoh pertanyaan yang dinyatakan.
Dannid
2
Jika Anda menggunakan hari ini, berhati-hatilah saat membandingkan tanggal. today()memiliki komponen jam juga. jadi jika Anda melakukannya: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')dan if losdat < datetime.datetime.today():itu akan selalu benar karena losdatakan memiliki komponen waktu tengah malam yang akan jatuh sebelum timestamptoday()
Dennis Decoene
3
@ DennisDecene: mengapa menggunakan datetime.datetime.today()alih-alih datetime.date.today(), ketika orang menginginkan datetime.dateobjek?
tzot
@tzot Ya itu juga yang ingin saya tunjukkan tetapi tidak jelas.
Dennis Decoene
45

Anda bisa mengonversi objek datetime ke tanggal dengan metode date () dari objek waktu tanggal, sebagai berikut:

<datetime_object>.date()
Furbeenator
sumber
3
import time
import datetime

# use mktime to step by one day
# end - the last day, numdays - count of days to step back
def gen_dates_list(end, numdays):
  start = end - datetime.timedelta(days=numdays+1)
  end   = int(time.mktime(end.timetuple()))
  start = int(time.mktime(start.timetuple()))
  # 86400 s = 1 day
  return xrange(start, end, 86400)

# if you need reverse the list of dates
for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)):
    print datetime.datetime.fromtimestamp(dt).date()
Ketenangan
sumber
2
Apakah Anda bermaksud memposting jawaban ini di sini? Sepertinya saya jawaban Anda diarahkan ke pertanyaan yang berbeda.
Semua Pekerja Sangat Penting
2

Anda dapat memasukkan formulir kode ini untuk (tanggal hari ini & Nama-nama Hari & jam) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

'19 -09-09 Senin 17:37:56 '

dan masukkan kode ini untuk ( hanya tanggal hari ini) : datetime.date.today().strftime('%y-%m-%d') '19 -09-10 '

untuk objek: datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()

kamran26
sumber
OP ingin mendapatkan datetime.dateobjek, dan bukan string, yang strftimeakan kembali (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime ).
Grzegorz Skibinski