Saya ingin membuat daftar tanggal, dimulai dengan hari ini, dan kembali beberapa hari secara acak, katakanlah, dalam contoh saya 100 hari. Apakah ada cara yang lebih baik untuk melakukannya daripada ini?
import datetime
a = datetime.datetime.today()
numdays = 100
dateList = []
for x in range (0, numdays):
dateList.append(a - datetime.timedelta(days = x))
print dateList
range(0, numdays)
dalam kasus ini?datetimes = [start + timedelta(seconds=x*60+randint(-30, 30)) for x in range (0, range_end*5, 5)]
mana variabelrange_end = 10
Pandas
sangat bagus untuk deret waktu secara umum, dan memiliki dukungan langsung untuk rentang tanggal.Sebagai contoh
pd.date_range()
:Ini juga memiliki banyak pilihan untuk membuat hidup lebih mudah. Misalnya, jika Anda hanya menginginkan hari kerja, Anda cukup menukar
bdate_range
.Lihat dokumentasi rentang tanggal
Selain itu, ia sepenuhnya mendukung zona waktu pytz dan dapat dengan lancar merentang musim semi / musim gugur DST.
EDIT oleh OP:
Jika Anda membutuhkan datetime python yang sebenarnya, yang bertentangan dengan cap waktu Pandas:
Ini menggunakan parameter "end" untuk mencocokkan dengan pertanyaan awal, tetapi jika Anda ingin tanggal yang menurun:
sumber
list(map(pd.Timestamp.to_pydatetime, datelist))
mendapatkan tipe datetime kembali ...pandas.datetime
kelas ditinggalkan dan akan dihapus dari panda dalam versi masa depan. Impor daridatetime
modul saja.Dapatkan rentang tanggal antara tanggal mulai dan tanggal yang ditentukan (Dioptimalkan untuk kompleksitas waktu & ruang):
sumber
(end-start+1)
tidak berfungsi, Anda tidak dapat menambahkan timedelta dan int. Anda bisa menggunakannya(end-start).days + 1
.Anda dapat menulis fungsi generator yang mengembalikan objek tanggal mulai dari hari ini:
Generator ini mengembalikan tanggal mulai dari hari ini dan mundur satu hari sekaligus. Berikut ini cara mengambil 3 kencan pertama:
Keuntungan dari pendekatan ini daripada pemahaman loop atau daftar adalah bahwa Anda dapat kembali sebanyak yang Anda inginkan.
Edit
Versi yang lebih ringkas menggunakan ekspresi generator alih-alih fungsi:
Pemakaian:
sumber
ya, temukan kembali roda .... cukup cari di forum dan Anda akan mendapatkan sesuatu seperti ini:
sumber
dateutil.rrule
mengimplementasikan iCalendar RFC - lebih mudah untuk menggunakan fungsi dengan perilaku yang terdefinisi dengan baik daripada beberapa implementasi dari fungsi yang hampir sama yang sedikit berbeda.dateutil.rrule
memungkinkan untuk membatasi perbaikan bug ke satu tempat.rrule
nama tidak sewenang-wenang; ini dari rfc yang sesuaiAnda juga dapat menggunakan ordinal hari untuk membuatnya lebih sederhana:
Atau seperti yang disarankan dalam komentar Anda dapat membuat daftar seperti ini:
sumber
Dari judul pertanyaan ini saya berharap menemukan sesuatu seperti
range()
, yang memungkinkan saya menentukan dua tanggal dan membuat daftar dengan semua tanggal di antaranya. Dengan begitu seseorang tidak perlu menghitung jumlah hari antara dua tanggal itu, jika seseorang tidak mengetahuinya sebelumnya.Jadi dengan risiko menjadi sedikit di luar topik, one-liner ini bekerja:
Semua kredit untuk jawaban ini !
sumber
Berikut jawaban yang sedikit berbeda dari jawaban S.Lott yang memberikan daftar tanggal antara dua tanggal
start
danend
. Dalam contoh di bawah ini, dari awal 2017 hingga hari ini.sumber
Sedikit jawaban yang terlambat saya tahu, tetapi saya hanya memiliki masalah yang sama dan memutuskan bahwa fungsi jangkauan internal Python sedikit kurang dalam hal ini sehingga saya menimpanya dalam modul util saya.
sumber
output = []
dan menukar garis dalamwhile cmp(...)
loop. Bandingkanrange(0,10,1)
dan_range(0,10,1)
.date_range
.Berdasarkan jawaban yang saya tulis untuk diri sendiri ini:
Keluaran:
Perbedaannya adalah bahwa saya mendapatkan
date
objek, bukan objekdatetime.datetime
.sumber
Jika ada dua tanggal dan Anda perlu rentang coba
sumber
Inilah inti yang saya buat, dari kode saya sendiri, ini mungkin membantu. (Saya tahu pertanyaannya terlalu lama, tetapi orang lain dapat menggunakannya)
https://gist.github.com/2287345
(hal yang sama di bawah)
sumber
Berikut adalah satu liner untuk skrip bash untuk mendapatkan daftar hari kerja, ini adalah python 3. Mudah dimodifikasi untuk apa pun, int pada akhirnya adalah jumlah hari di masa lalu yang Anda inginkan.
Berikut adalah varian untuk memberikan tanggal mulai (atau lebih tepatnya, akhir)
Berikut adalah varian untuk tanggal mulai dan berakhir yang sewenang-wenang. bukan berarti ini tidak terlalu efisien, tetapi bagus untuk meletakkan for for di skrip bash:
sumber
Matplotlib terkait
sumber
Saya tahu ini telah dijawab, tetapi saya akan meletakkan jawaban saya untuk tujuan historis, dan karena saya pikir itu lurus ke depan.
Tentu itu tidak akan memenangkan apa pun seperti golf kode, tapi saya pikir itu elegan.
sumber
arange
langkah-langkah ini cukup bagus, tetapilistOfDates
terdiri dari datetime64 numpy bukannya datetime asli python.np.arange(…).astype(dt.datetime)
untuk membuatarange
datetime python asli kembali bukan datetime numpy64.Contoh lain yang diperhitungkan maju atau mundur, mulai dari jawaban Sandeep.
memberi
dan
memberi
Perhatikan bahwa tanggal mulai termasuk dalam pengembalian, jadi jika Anda ingin empat tanggal total, gunakan
timedelta(days=3)
sumber
sumber
Generator rentang tanggal bulanan dengan
datetime
dandateutil
. Sederhana dan mudah dimengerti:sumber
sumber
end
seharusnyabase - datetime.timedelta
. Selain itu ... Mengapa solusi ini lebih baik daripada yang asli?Dari jawaban di atas saya membuat contoh ini untuk generator tanggal
sumber