Waktu tarikh perpustakaan standard Python boleh digunakan untuk memproses tarikh dan masa (tarikh, masa dan masa). Kaedah strftime() dan strptime(), yang menukar tarikh dan masa kepada dan daripada rentetan, boleh digunakan untuk memanipulasi tarikh dan masa dalam pelbagai format.
Ia juga boleh melakukan operasi seperti tolak dan tambah. Sebagai contoh, anda boleh mengira dan mendapatkan tarikh dengan mudah 10 hari yang lalu atau 3 minggu dari sekarang, atau masa 50 minit dari sekarang.
Pertama, kami akan menerangkan kelas objek berikut yang tersedia dalam modul datetime.
datetime.datetime
:Tarikh dan masa (tarikh dan masa)datetime.date
:Tarikhdatetime.time
:Masadatetime.timedelta
:Perbezaan masa dan masa berlalu
Kaedah strftime() dan strptime(), yang menukar tarikh/masa dan rentetan antara satu sama lain, juga dijelaskan.
datetime
objekdatetime.now()
:Tarikh hari ini, masa semasadatetime
Pembina Objek- Menukar objek datetime kepada objek tarikh
date
objekdate.today()
:Tarikh hari ini- Pembina untuk objek tarikh
time
objek- Pembina untuk objek masa
timedelta
objek- Tolak objek datetime dan date untuk mencipta objek timedelta.
- Pembina untuk objek timedelta
- Penolakan dan penambahan menggunakan objek timedelta
strftime()
:Penukaran dari tarikh dan masa kepada rentetanstrptime()
:Penukaran daripada rentetan kepada tarikh dan masa
Turut disertakan dalam pustaka standard ialah modul kalendar, yang menjana kalendar dalam teks biasa atau format HTML.
objek datetime
Objek datetime ialah objek yang mempunyai maklumat tarikh (tahun, bulan, hari) dan masa (jam, minit, saat, mikrosaat). Anda boleh mengakses maklumat tersebut dengan atribut berikut.
year
month
day
hour
minute
second
microsecond
datetime.now():Tarikh hari ini, masa semasa
datetime.now() akan memberi anda objek datetime dengan tarikh hari ini (tarikh semasa) dan masa semasa.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
Pembina untuk objek datetime
Ia juga mungkin untuk menjana objek datetime untuk tarikh dan masa sewenang-wenangnya.
Pembina untuk objek datetime adalah seperti berikut.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Nilai berikut diperlukan dan nilai lain boleh ditinggalkan. Jika ditinggalkan, nilai lalai ialah 0.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Menukar objek datetime kepada objek tarikh
Objek datetime boleh ditukar kepada objek tarikh dengan kaedah date(), seperti yang diterangkan seterusnya.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
objek tarikh
Objek tarikh ialah objek yang mengandungi maklumat tentang tarikh (tahun, bulan, hari). Ia boleh diakses dengan atribut tahun, bulan dan hari.
date.today():Tarikh hari ini
Objek tarikh tarikh semasa (tarikh hari ini) boleh diperolehi dengan date.today().
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Pembina untuk objek tarikh
Pembina untuk objek tarikh adalah seperti berikut
date(year, month, day)
Semuanya diperlukan dan tidak boleh ditinggalkan.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
objek masa
Objek masa ialah objek yang mengandungi maklumat tentang masa (jam, minit, saat dan mikrosaat). Ia boleh diakses menggunakan atribut jam, minit, saat dan mikrosaat.
Pembina untuk objek masa
Pembina objek masa adalah seperti berikut.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Kesemuanya adalah pilihan, dan jika ia ditinggalkan, ia ditetapkan kepada 0.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
objek timedelta
Objek timedelta ialah objek yang mewakili perbezaan masa antara dua tarikh dan masa, atau masa berlalu. Ia mempunyai maklumat dalam hari, saat dan mikrosaat, dan boleh diakses oleh atribut hari, saat dan mikrosaat. Ia juga mungkin untuk mendapatkan jumlah bilangan saat menggunakan kaedah total_seconds().
Tolak objek datetime dan date untuk mencipta objek timedelta.
Menolak objek datetime antara satu sama lain menghasilkan objek timedelta.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Penolakan objek tarikh antara satu sama lain juga menghasilkan objek timedelta.
Pembina untuk objek timedelta
Pembina objek timedelta adalah seperti berikut
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Kesemuanya adalah pilihan, dan jika ia ditinggalkan, ia ditetapkan kepada 0.
Ambil perhatian bahawa objek timedelta hanya memegang maklumat berikut.
- beberapa hari:
days
- bilangan saat:
seconds
- kiraan mikrosaat:
microseconds
Sebagai contoh, dua berikut adalah sama
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Penolakan dan penambahan menggunakan objek timedelta
Objek timedelta boleh digunakan dengan objek datetime dan tarikh untuk melakukan operasi seperti penolakan dan penambahan. Sebagai contoh, anda boleh mengira dan mendapatkan tarikh dengan mudah seminggu yang lalu atau 10 hari dari sekarang, atau masa 50 minit dari sekarang.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
Ia juga boleh digunakan untuk mengira bilangan hari sehingga tarikh tertentu.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Penukaran dari tarikh dan masa kepada rentetan
Kaedah strftime() bagi objek datetime dan tarikh boleh digunakan untuk menukar maklumat tarikh dan masa (tarikh dan masa) ke dalam rentetan dalam sebarang format format.
kod pemformatan
Lihat dokumentasi rasmi di bawah untuk kod pemformatan yang tersedia.
Kod pemformatan utama disenaraikan di bawah.
%d
:Hari dalam bulan dalam tatatanda perpuluhan dengan sifar diisi.%m
:Bulan dalam tatatanda perpuluhan dengan sifar diisi.%y
:Dua digit terakhir tahun dalam tatatanda perpuluhan penuh sifar.%Y
:Empat digit tahun dalam tatatanda perpuluhan dengan sifar diisi.%H
:Apabila dinyatakan dalam tatatanda perpuluhan dengan diisi sifar (notasi 24 jam)%I
:Apabila dinyatakan dalam tatatanda perpuluhan dengan sifar diisi (notasi 12 jam)%M
:Untuk tatatanda perpuluhan dengan sifar diisi.%S
:Saat dalam tatatanda perpuluhan dengan sifar diisi.%f
:Mikrosaat (6 digit) dalam tatatanda perpuluhan dengan 0 diisi.%A
:Nama hari dalam seminggu untuk tempat tersebut%a
:Nama hari untuk tempat (bentuk singkatan)%B
:Nama bulan tempatan%b
:Nama bulan tempatan (bentuk singkatan)%j
:Hari dalam tahun dalam tatatanda perpuluhan dengan isian sifar.%U
:Nombor minggu tahun dalam tatatanda perpuluhan dengan isian sifar (minggu bermula pada hari Ahad)%W
:Nombor minggu tahun dalam tatatanda perpuluhan dengan isian sifar (minggu bermula pada hari Isnin)
Kod pemformatan berikut untuk nama hari dan bulan boleh diperolehi dalam rentetan berbeza bergantung pada tempat.
%A
%a
%B
%b
Terdapat juga kaedah khusus untuk rentetan format ISO 8601.
Kod Contoh
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Jika anda ingin mendapatkan nombor dan bukannya rentetan, cuma tukarkannya kepada integer dengan int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Dalam kombinasi dengan objek timedelta, adalah mudah untuk mencipta, sebagai contoh, senarai tarikh dua mingguan dalam sebarang format.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Menggunakan tatatanda pemahaman senarai adalah lebih bijak.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- Artikel berkaitan:Menggunakan notasi pemahaman senarai Python
strptime():Penukaran daripada rentetan kepada tarikh dan masa
datetime strptime() boleh digunakan untuk mencipta objek datetime daripada rentetan tarikh atau masa. Ia adalah perlu untuk menentukan rentetan pemformatan yang sepadan dengan rentetan asal.
Terdapat juga kaedah khusus untuk rentetan ISO 8601 (Python 3.7 atau lebih baru).
Kod Contoh
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Dengan menggunakan kaedah strftime() pada objek datetime yang diambil, anda boleh mewakili tarikh dan masa dalam format yang berbeza daripada rentetan asal.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Jika anda menukarnya kepada objek datetime, anda juga boleh melakukan operasi dengan objek timedelta, jadi sebagai contoh, anda boleh menjana rentetan tarikh 10 hari yang lalu dalam format yang sama.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22