2011-08-23 12 views

Respuesta

1

después de calcular theMonth, comprobar si es igual a 13 (el mes de diciembre) y sustituya el valor con 1:

theMonth = theMonth==13 ? 1 : theMonth; 
5
int theMonth = ((System.DateTime)periodStartDate).AddMonths(1).Month; 
+0

Esta es la respuesta correcta si quiere obtener el próximo mes. Tal vez eso es lo que está buscando. –

1

Si llama AddMonths(1) continuación .NET rodará automáticamente la fecha en el próximo año.

periodStartDate.AddMonths(1).Month; 
14

La expresión ((System.DateTime)periodStartDate).Month+1 no lanza un error si el mes es de Diciembre - simplemente devuelve 13. Sospecho que estás haciendo esto:

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month + 1, 1); 

que se generará un error.

Tal vez puedas probar:

var nextMonth = new DateTime(periodStartDate.Year, periodStartDate.Month, 1) 
    .AddMonths(1); 
35

creo que se puede conseguir de esta manera

DateTime dt = new DateTime(2011,12,2); 
DateTime dayone = new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1); 

Ahora usted tiene una DateTime objeto propio de la primera del siguiente mes, hacer lo que quieras con él

0
DateTime now = DateTime.Now; 
     DateTime nextMonth; 
     if(now.Day > 1) 
     nextMonth = now.AddDays(-(now.Day - 1)).AddMonths(1); 
     else 
     nextMonth = now.AddMonths(1); 

Dónde Ahora es la fecha que desea comenzar, puede reemplazar con TheStartPeriod

11

me gusta la respuesta de V4V, pero yo escribir de esta manera:

DateTime dt = new DateTime(2011,12,2); 
DateTime firstDayNextMonth = dt.AddMonths(1).AddDays(-dt.Day+1); 

Por ejemplo, yo podría estar calculando un tiempo futuro y este código hace que sin despojar a la pieza del tiempo.

por hvd de comentario más astuto, este código debe ser:

DateTime dt = new DateTime(2011,12,2); 
DateTime firstDayNextMonth = dt.AddDays(-dt.Day+1).AddMonths(1); 
+3

Estás asumiendo que 'dt.AddMonths (1) .Day' es lo mismo que' dt.Day'. Considere lo que sucede cuando está en, por ejemplo, 31 de enero. – hvd

+0

Gran observación. He modificado por respuesta. –

+0

@hvd - El primer ejemplo es exactamente cómo lo escribí. Me llevó una hora averiguar qué estaba pasando. En mi caso, qué sucedió qué excepción de falta de memoria, ya que el calendario representaba enero en un bucle infinito - –

0
DateTime date = DateTime.Now; 
Console.WriteLine(date); 
// Sunday 28.06.2015 г. 10:22:41 ч. 

int monthsBack = -1; 
int whichDay = 1; 
// It means -> what day the first day of the previous month is. 
DayOfWeek FirstDayOfWeek = date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek; 
Console.WriteLine(FirstDayOfWeek); 
// Friday 

int delta = DayOfWeek.Monday - date.AddMonths(monthsBack).AddDays(whichDay).DayOfWeek; 
Console.WriteLine(delta); 
// -4 
//-4 ->Monday , -3 ->Tuesday, -2 ->Wednesday , -1 ->Thursday, 0 ->Friday 
+0

Debe explicar su código. –

Cuestiones relacionadas