Saya bahkan tidak yakin bagaimana melakukan ini tanpa menggunakan beberapa jenis solusi loop / counter mengerikan. Inilah masalahnya:
Saya diberi dua tanggal, tanggal mulai dan tanggal berakhir dan pada interval yang ditentukan saya perlu mengambil tindakan. Misalnya: untuk setiap tanggal antara 3/10/2009 pada setiap hari ketiga hingga 3/26/2009 saya perlu membuat entri dalam Daftar. Jadi input saya adalah:
DateTime StartDate = "3/10/2009";
DateTime EndDate = "3/26/2009";
int DayInterval = 3;
dan output saya akan menjadi daftar yang memiliki tanggal berikut:
3/13/2009 3/16/2009 3/19/2009 3/22/2009 3/25/2009
Jadi bagaimana aku bisa melakukan hal seperti ini? Saya berpikir tentang menggunakan for for yang akan beralih antara setiap hari dalam rentang dengan penghitung terpisah seperti:
int count = 0;
for(int i = 0; i < n; i++)
{
count++;
if(count >= DayInterval)
{
//take action
count = 0;
}
}
Tapi sepertinya ada cara yang lebih baik?
Jawaban:
Nah, Anda harus mengulanginya dengan satu atau lain cara. Saya lebih suka mendefinisikan metode seperti ini:
Maka Anda dapat menggunakannya seperti ini:
Dengan cara ini, Anda dapat menekan setiap hari, setiap hari ketiga, hanya hari kerja, dll. Misalnya, untuk mengembalikan setiap hari ketiga dimulai dengan tanggal "mulai", Anda bisa menelepon saja
AddDays(3)
dalam loopAddDays(1)
.sumber
Saya memiliki
Range
kelas di MiscUtil yang menurut Anda berguna. Dikombinasikan dengan berbagai metode ekstensi, Anda dapat melakukan:(Anda mungkin atau mungkin tidak ingin mengecualikan akhir - saya hanya berpikir saya akan memberikannya sebagai contoh.)
Ini pada dasarnya adalah bentuk solusi mquander yang siap digulung (dan lebih bertujuan umum).
sumber
ExcludeEnd()
imut.Sebagai contoh Anda dapat mencoba
sumber
Kode dari @mquander dan @Yogurt The Wise digunakan dalam ekstensi:
sumber
EachDayTo
danEachMonthTo
? Saya pikir saya melewatkan sesuatu di sini.sumber
1 Tahun kemudian, semoga membantu seseorang,
Versi ini termasuk predikat , agar lebih fleksibel.
Pemakaian
Setiap hari hingga ulang tahunku
Bulanan hingga ulang tahun saya, Langkah 2 bulan
Setiap tahun hingga ulang tahunku
Gunakan
RangeFrom
sebagai gantinyaPenerapan
Ekstra
Anda bisa melempar Pengecualian jika
fromDate > toDate
, tetapi saya lebih suka mengembalikan rentang kosong sebagai gantinya[]
sumber
sumber
while
berjalan.Menurut masalah Anda dapat mencoba ini ...
Terima kasih......
sumber
sumber
Anda dapat mempertimbangkan untuk menulis iterator, yang memungkinkan Anda untuk menggunakan sintaks loop normal 'untuk' seperti '++'. Saya mencari dan menemukan pertanyaan serupa dijawab di sini di StackOverflow yang memberikan petunjuk tentang membuat DateTime iterable.
sumber
Anda dapat menggunakan
DateTime.AddDays()
fungsi untuk menambahkan AndaDayInterval
keStartDate
dan periksa untuk memastikan itu kurang dariEndDate
.sumber
Anda harus berhati-hati di sini untuk tidak melewatkan tanggal ketika dalam lingkaran solusi yang lebih baik.
ini memberi Anda tanggal pertama mulai dan menggunakannya dalam lingkaran sebelum menambahkannya dan itu akan memproses semua tanggal termasuk tanggal terakhir tanggal maka <= akhir.
jadi jawaban di atas adalah yang benar.
sumber
Anda bisa menggunakan ini.
sumber
Ulangi setiap 15 menit
sumber
@ jacob-sobus dan @mquander dan @Yogurt tidak sepenuhnya benar .. Jika saya perlu hari berikutnya saya menunggu 00:00 waktu sebagian besar
sumber
Inilah 2 sen saya pada tahun 2020.
sumber