2011-01-24 20 views
6

Hay una forma de establecer valores negativos al llamar al constructor DateTime.Valores negativos en C# DateTime

así:

DateTime date = new DateTime(2011, 2, -1); 

sería el mismo que:

DateTime date = new DateTime(2011, 1, 31); 

Sé que esto funciona en otros idiomas, pero el problema es que C# .NET genera una excepción cuando estoy haciendo esto. ¿Alguna idea sobre cómo hacer esto en C# .net?

+0

esto no puede funcionar de manera diferente en diferentes lenguajes .NET, porque 'DateTime' es parte de la biblioteca común. – Andrey

+0

¿por qué quieres una fecha negativa? si quieres restar tiempo, entonces usa .AddDays (-x) o .AddMonths (-x) etc. o hay otra clase llamada TimeSpan que puedes usar para tiempos que no son 1 día completo o 1 mes completo, etc. – WraithNath

+0

@ WraithNath: ¡¿Cómo se supone que debo escribir una aplicación en .net para recordar el cumpleaños de mis dinosaurios con esa limitación!?!?! – Mystra007

Respuesta

8

No se puede. Si desea obtener el último día del mes, debe comenzar con el inicio del mes siguiente y luego despegar un día o usar DateTime.DaysInMonth(year, month).

Personalmente, utilizaría el segundo enfoque, ya que de lo contrario, debe asegurarse de encontrar correctamente el último día de diciembre comenzando el 1 de enero del año siguiente, por ejemplo. Aquí está el código que haría uso:

DateTime date = new DateTime(year, month, DateTime.DaysInMonth(year, month)); 
10

Uso

DateTime date = new DateTime(2011, 2,1).AddDays(-1); 
+0

Recuerdo que me confundí con la forma de agregar un día menos cuando comencé .net: P – nik0lias

+2

@ nik0lias: Hehe =) ¡Tengo experiencia en matemáticas y me confundiría si no pudiera agregar valores negativos! – Jens

1

Un DateTime es siempre una posición absoluta en el tiempo. Creo que lo que estás buscando es un TimeSpan, que también puede ser negativo.

Cuestiones relacionadas