@ Mark: Untuk apa saya bertanya? Jawaban Anda sendiri tidak memerlukan metode ekstensi, saya pikir.
abatishchev
4
Hari terakhir tidak khusus untuk bulan saja, Anda perlu tahun juga. Hari terakhir februari 2010 adalah 28, tetapi hari terakhir februari 2008 adalah 29.
Guffa
@abatishchev Tidak memerlukan metode ekstensi, tetapi pertanyaannya tidak benar-benar memintanya. Namun, jauh lebih bagus dan lebih mudah dibaca, setidaknya bagi saya, untuk melihatnya. Metode penyuluhan lebih merupakan saran daripada apa pun. Solusi apa pun akan bekerja dengan metode ekstensi, bukan hanya milik saya.
Markus
Jawaban:
657
Hari terakhir bulan Anda mendapatkan seperti ini, yang menghasilkan 31:
public DateTime statis ConvertToLastDayOfMonth (DateTime date) {mengembalikan DateTime baru (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } untuk mendapatkan hari terakhir bulan itu dalam format tanggal
regisbsb
177
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@ Henk Sebenarnya saya menarik ini dari suatu tempat di sumber kami yang menciptakan DateTimedari lastDayOfMonth. Jujur baik cara bekerja dengan sangat baik. Ini argumen yang sangat bagus mana yang lebih baik. Saya sudah melakukan keduanya dan keduanya menghasilkan jawaban yang sama.
Mark
37
Jika Anda menginginkan tanggal , diberikan satu bulan dan satu tahun, ini sepertinya benar:
Anda dapat menemukan tanggal terakhir setiap bulan dengan kode ini:
var now =DateTime.Now;var startOfMonth =newDateTime(now.Year, now.Month,1);varDaysInMonth=DateTime.DaysInMonth(now.Year, now.Month);var lastDay =newDateTime(now.Year, now.Month,DaysInMonth);
Sungguh mengherankan saya bahwa alih-alih metode sederhana:, DateTime.DaysInMonthmengapa seseorang harus mencari cara yang tidak dapat dibaca dan rumit untuk mencapainya !? - Tetapi sebagai solusi yang valid dapat diterima;).
Untuk mendapatkan hari terakhir dalam sebulan di kalender tertentu - dan dalam metode ekstensi -:
publicstaticintDaysInMonthBy(thisDateTime src,Calendar calendar){var year = calendar.GetYear(src);// year of src in your calendarvar month = calendar.GetMonth(src);// month of src in your calendarvar lastDay = calendar.GetDaysInMonth(year, month);// days in month means last day of that month in your calendarreturn lastDay;}
// Use any date you want, for the purpose of this example we use 1980-08-03.var myDate =newDateTime(1980,8,3);var lastDayOfMonth =newDateTime(myDate.Year, myDate.Month,DateTime.DaysInMonth(myDate.Year, myDate.Month));
Jawaban ini hanya menanggapi contoh dari penanya. Jawaban yang lebih komprehensif akan lebih membantu.
Scott Lawrence
Anda dapat menggunakan tanggal apa pun yang Anda inginkan sebagai nilai input, sehingga Anda dapat menerapkan solusi ini ke tanggal yang Anda inginkan.
Jasper Risseeuw
1
Ini akan gagal untuk beberapa tanggal, coba var myDate = new DateTime(1980, 1, 31);(kembalilah tanggal 29)
Hans Ke
Hans Ke st ing, Anda benar. Metode ini akan gagal jika bulan berikutnya memiliki hari yang lebih sedikit daripada saat ini. Saya kira cara termudah adalah dengan menggunakan DateTime.DaysInMonth () tetapi itu adalah jawaban yang diterima sehingga jawaban saya harus dihapus.
Jasper Risseeuw
-1
Saya tidak tahu C # tetapi, jika ternyata tidak ada cara API yang mudah untuk mendapatkannya, salah satu cara Anda dapat melakukannya adalah dengan mengikuti logika:
today ->+1 month ->set day of month to 1->-1 day
Tentu saja, itu mengasumsikan Anda memiliki matematika tanggal dari jenis itu.
Jawaban:
Hari terakhir bulan Anda mendapatkan seperti ini, yang menghasilkan 31:
sumber
sumber
DateTime
darilastDayOfMonth
. Jujur baik cara bekerja dengan sangat baik. Ini argumen yang sangat bagus mana yang lebih baik. Saya sudah melakukan keduanya dan keduanya menghasilkan jawaban yang sama.Jika Anda menginginkan tanggal , diberikan satu bulan dan satu tahun, ini sepertinya benar:
sumber
Kurangi satu hari dari yang pertama bulan depan:
Juga, jika Anda membutuhkannya untuk bulan Desember juga:
sumber
Anda dapat menemukan tanggal terakhir setiap bulan dengan kode ini:
sumber
Anda dapat menemukan hari terakhir bulan itu dengan satu baris kode:
sumber
DateTime.DaysInMonth
mengapa seseorang harus mencari cara yang tidak dapat dibaca dan rumit untuk mencapainya !? - Tetapi sebagai solusi yang valid dapat diterima;).Dari
DateTimePicker:
Kencan pertama:
Tanggal terakhir:
sumber
Untuk mendapatkan hari terakhir dalam sebulan di kalender tertentu - dan dalam metode ekstensi -:
sumber
sumber
var myDate = new DateTime(1980, 1, 31);
(kembalilah tanggal 29)Saya tidak tahu C # tetapi, jika ternyata tidak ada cara API yang mudah untuk mendapatkannya, salah satu cara Anda dapat melakukannya adalah dengan mengikuti logika:
Tentu saja, itu mengasumsikan Anda memiliki matematika tanggal dari jenis itu.
sumber