@ Mark: ¿Para qué puedo preguntar? Creo que su propia respuesta no requiere un método de extensión.
abatishchev
44
El último día no es específico solo para el mes, también necesita el año. El último día de febrero de 2010 es el 28, pero el último día de febrero de 2008 es el 29.
Guffa
@abatishchev No requiere un método de extensión, pero la pregunta realmente no lo pide. Sin embargo, es mucho más agradable y mucho más legible, al menos para mí, verlo. El método de extensión fue más una sugerencia que otra cosa. Cualquier solución funcionaría en un método de extensión, no solo el mío.
Mark
Respuestas:
657
El último día del mes obtienes así, que devuelve 31:
public static DateTime ConvertToLastDayOfMonth (DateTime date) {return new DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } para obtener el último día del mes en un formato de fecha
regisbsb
177
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@Henk En realidad, saqué esto de un lugar en nuestra fuente que crea el DateTimede lastDayOfMonth. Honestamente, de cualquier manera funciona perfectamente bien. Es un argumento pedante de qué manera es mejor. Lo he hecho en ambos sentidos y ambos dan la misma respuesta.
Mark
37
Si desea la fecha , dado un mes y un año, esto parece correcto:
Puede encontrar la última fecha de cualquier mes por este código:
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);
Me pregunta que, en lugar de un método simple DateTime.DaysInMonth, ¿por qué alguien debería buscar esta forma ilegible y compleja de lograrlo? - Pero como una solución válida es aceptable;).
Para obtener el último día de un mes en un calendario específico y en un método de extensión:
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));
Esta respuesta responde solo al ejemplo del interlocutor. Una respuesta más completa sería más útil.
Scott Lawrence
Puede usar cualquier fecha que desee como valor de entrada, por lo que puede aplicar esta solución a cualquier fecha que desee.
Jasper Risseeuw
1
Fallará para algunas fechas, intente var myDate = new DateTime(1980, 1, 31);(regresa el 29)
Hans Ke sting
Hans Keing, tienes razón. Este método fallará si el próximo mes tiene menos días que el actual. Supongo que la forma más fácil es usar DateTime.DaysInMonth () pero esa es la respuesta aceptada, por lo que mi respuesta debe eliminarse.
Jasper Risseeuw
-1
No sé C # pero, si resulta que no hay una forma API conveniente de obtenerlo, una de las formas en que puede hacerlo es siguiendo la lógica:
today ->+1 month ->set day of month to 1->-1 day
Por supuesto, eso supone que tienes matemática de fechas de ese tipo.
Respuestas:
El último día del mes obtienes así, que devuelve 31:
fuente
fuente
DateTime
delastDayOfMonth
. Honestamente, de cualquier manera funciona perfectamente bien. Es un argumento pedante de qué manera es mejor. Lo he hecho en ambos sentidos y ambos dan la misma respuesta.Si desea la fecha , dado un mes y un año, esto parece correcto:
fuente
Resta un día del primero del próximo mes:
Además, en caso de que también lo necesite para diciembre:
fuente
Puede encontrar la última fecha de cualquier mes por este código:
fuente
Puede encontrar el último día del mes por una sola línea de código:
fuente
DateTime.DaysInMonth
, ¿por qué alguien debería buscar esta forma ilegible y compleja de lograrlo? - Pero como una solución válida es aceptable;).De
DateTimePicker:
Primera fecha:
Ultima cita:
fuente
Para obtener el último día de un mes en un calendario específico y en un método de extensión:
fuente
fuente
var myDate = new DateTime(1980, 1, 31);
(regresa el 29)No sé C # pero, si resulta que no hay una forma API conveniente de obtenerlo, una de las formas en que puede hacerlo es siguiendo la lógica:
Por supuesto, eso supone que tienes matemática de fechas de ese tipo.
fuente