Saya punya tanggal "10/10/11(m-d-y)"
dan saya ingin menambahkan 5 hari untuk itu menggunakan skrip Python. Silakan pertimbangkan solusi umum yang bekerja pada bulan yang berakhir juga.
Saya menggunakan kode berikut:
import re
from datetime import datetime
StartDate = "10/10/11"
Date = datetime.strptime(StartDate, "%m/%d/%y")
print Date
-> sedang mencetak '2011-10-10 00:00:00'
Sekarang saya ingin menambahkan 5 hari ke tanggal ini. Saya menggunakan kode berikut:
EndDate = Date.today()+timedelta(days=10)
Yang mengembalikan kesalahan ini:
name 'timedelta' is not defined
name 'timedelta' is not defined
, itu berarti Anda belum menentukan ditimedelta
mana pun. Python biasanya cukup informatif tentang pesan kesalahannya.Jawaban:
Jawaban sebelumnya benar tetapi umumnya lebih baik dilakukan:
Maka Anda harus, menggunakan
datetime.timedelta
:sumber
strptime
metode padadatetime
kelas dalamdatetime
modul, jadi Anda perlu menentukandatetime.datetime
.datetime
? Anda tidak bisa mengandalkan konvensi untuk mengetahuinya, tetapi selalu harus melihat impor.from datetime import DateTime
karena kelas CamelCased, tetapi datetime mendahului PEP8.Impor
timedelta
dandate
pertama.Dan
date.today()
akan mengembalikan datetime hari ini, mungkin Anda inginkansumber
date
objek tidak memilikitimedelta
metode. Apa versi Python yang Anda gunakan?from datetime import timedelta, date; date.today() + timedelta(days=10)
Jika Anda sudah menggunakan panda , Anda dapat menghemat sedikit ruang dengan tidak menentukan format:
sumber
Saya kira Anda kehilangan sesuatu seperti itu:
sumber
Berikut adalah metode lain untuk menambahkan hari pada tanggal menggunakan relativedelta dateutil .
Keluaran:
sumber
Jika Anda ingin menambahkan hari ke tanggal sekarang, Anda dapat menggunakan kode ini
sumber
Ini adalah fungsi untuk mendapatkan dari sekarang + hari yang ditentukan
Pemakaian:
sumber
Untuk memiliki kode yang kurang verbose , dan menghindari konflik nama antara datetime dan datetime.datetime , Anda harus mengganti nama kelas dengan nama CamelCase .
Jadi Anda bisa melakukan yang berikut, yang menurut saya lebih jelas.
Juga, tidak akan ada konflik nama jika Anda ingin
import datetime
nanti.sumber
menggunakan
timedelta
s yang dapat Anda lakukan:sumber
Secara umum Anda belum mendapat jawaban sekarang, tetapi mungkin kelas yang saya buat juga akan membantu. Bagi saya itu menyelesaikan semua kebutuhan saya yang pernah saya miliki dalam proyek Pyhon saya.
Bagaimana cara menggunakannya
self.tz = pytz.timezone("Europe/Warsaw")
- di sini Anda menentukan Zona Waktu yang ingin Anda gunakan dalam proyekGetDate("2019-08-08").current()
- ini akan mengonversi tanggal string Anda menjadi objek yang sadar waktu dengan zona waktu yang Anda tetapkan dalam pt 1. Format string default adalahformat="%Y-%m-%d"
tetapi jangan ragu untuk mengubahnya. (mis.GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current()
)GetDate("2019-08-08").get_month_first_day()
mengembalikan tanggal yang diberikan (string atau objek) bulan hari pertamaGetDate("2019-08-08").get_month_last_day()
mengembalikan tanggal yang diberikan bulan hari terakhirGetDate("2019-08-08").minimum_time()
mengembalikan tanggal yang diberikan mulai hariGetDate("2019-08-08").maximum_time()
mengembalikan tanggal akhir hari yang diberikanGetDate("2019-08-08").time_delta_days({number_of_days})
mengembalikan tanggal yang diberikan + tambahkan {jumlah hari} (Anda juga dapat menghubungi:GetDate(timezone.now()).time_delta_days(-1)
untuk kemarin)GetDate("2019-08-08").time_delta_haours({number_of_hours})
mirip dengan 7 tetapi bekerja pada jamGetDate("2019-08-08").time_delta_seconds({number_of_seconds})
mirip dengan pt 7 tetapi bekerja pada detiksumber
Beberapa waktu kita perlu menggunakan pencarian dari tanggal & tanggal. Jika kita menggunakan date__range maka kita perlu menambahkan 1 hari dengan to_date jika tidak, queryset akan kosong.
Contoh:
dari datetime impor timedelta
from_date = parse_date (request.POST ['from_date'])
to_date = parse_date (request.POST ['to_date']) + timedelta (hari = 1)
attendance_list = models.DailyAttendance.objects.filter (attdate__range = [from_date, to_date])
sumber