¿Cómo puedo establecer un DateTime para el primer día del mes en C#?establecer DateTime al inicio del mes
Respuesta
var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year,now.Month,1);
Un consejo: siempre ponga 'DateTime. Ahora' en una variable y úsala si vas a usar el valor repetidamente. Existe una pequeña posibilidad de error en caso de que este código se ejecute exactamente alrededor de la medianoche; las dos llamadas a 'DateTime.Now' pueden ocurrir a cada lado de la medianoche causando efectos posiblemente extraños. –
Buen punto. Creo que la medianoche del año nuevo es el momento en que esto podría causar un problema. –
No solo de Año Nuevo. Sería un problema a la medianoche del último día de cualquier mes. En cualquier caso, solo sería un problema si se ejecutara en ese mismo nanosegundo de medianoche a fin de mes. Pero desde que arregló su código, todo está bien ahora. –
DateTime now = DateTime.Now;
DateTime date = new DateTime(now.Year, now.Month, 1);
Se puede utilizar cualquier otra cosa en lugar de DateTime.Now
Algo como esto funcionaría
DateTime firstDay = DateTime.Today.AddDays(1 - DateTime.Today.Day);
+1 porque se ejecuta más rápido que el otro método con la instanciación –
Como Fredrik Mork comentó la respuesta de Nick Jones, es mejor almacenar el Datetime en una variable cuando lo está usando varias veces, para garantizar que no haya problemas alrededor de la medianoche en el último día del mes. Entonces: DateTime hoy = DateTime.Today; DateTime firstDay = today.AddDays (1-today.Day); –
Ésta debe ser eficiente y correcta:
DateTime RoundDateTimeToMonth(DateTime time)
{
long ticks = time.Ticks;
return new DateTime((ticks/TimeSpan.TicksPerDay - time.Day + 1) * TimeSpan.TicksPerDay, time.Kind);
}
Aquí ticks/TimeSpan.TicksPerDay
re convierte la cuenta de días completos hasta time
y - time.Day + 1
restablece esta cuenta hasta el comienzo del mes.
Creo que se reinició al principio del día. – SuperLucky
@SuperLucky: no, no es así. – nayato
Un poco tarde a la fiesta, pero aquí es un método de extensión que hizo el truco para mí
public static class DateTimeExtensions
{
public static DateTime FirstDayOfMonth(this DateTime dt)
{
return new DateTime(dt.Year, dt.Month, 1);
}
}
El problema con esto es que no mantiene la zona horaria original. –
@MikeCole: Acepta dos manos contigo –
public static DateTime FirstDayOfMonth(this DateTime current)
{
return current.AddDays(1 - current.Day);
}
acabo de crear algunos métodos de extensión en base a Nick respuesta y otros en el SO
public static class DateTimeExtensions
{
/// <summary>
/// get the datetime of the start of the week
/// </summary>
/// <param name="dt"></param>
/// <param name="startOfWeek"></param>
/// <returns></returns>
/// <example>
/// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
/// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
/// </example>
/// <remarks>http://stackoverflow.com/a/38064/428061</remarks>
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
{
var diff = dt.DayOfWeek - startOfWeek;
if (diff < 0)
diff += 7;
return dt.AddDays(-1 * diff).Date;
}
/// <summary>
/// get the datetime of the start of the month
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
/// <remarks>http://stackoverflow.com/a/5002582/428061</remarks>
public static DateTime StartOfMonth(this DateTime dt)
{
var now = DateTime.Now;
return new DateTime(now.Year, now.Month, 1);
}
/// <summary>
/// get datetime of the start of the year
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static DateTime StartOfYear(this DateTime dt)
{
var now = DateTime.Now;
return new DateTime(now.Year, 1, 1);
}
}
var currentDate = DateTime.UtcNow.Date;
var startDateTimeOfCurrentMonth = currentDate.AddDays(-(currentDate.Day - 1));
Esto es un duplicado de la respuesta de Fubo, ¿no crees? –
Aunque este código podría resolver el problema, siempre se recomienda agregar una explicación que explique por qué y cómo funciona. – BDL
@ThomasAyoub - No, esto no es un duplicado completo de la respuesta de fubo, ya que no contendrá la portada de tiempo. –
la esperanza que esto le ayuda.
textbox1.Text = "01-" + DateTime.Now.ToString ("MMM-yyyy");
- 1. convertir mes del nombre al número
- 2. sql - inicio de la hora, mes, etc.
- 3. Formateo de un DateTime en un mes abreviado en inglés
- 4. Establecer una variable de DateTime
- 5. Establecer los minutos en DateTime?
- 6. Establecer DataFormatString para MVC3 DateTime
- 7. Establecer el valor del campo datetime para anular
- 8. Convertir mes en mes nombre
- 9. DateTime convertir de int a Mes Nombre en C#, Silverlight
- 10. convertido al DateTime
- 11. Obtener el nombre Mes del número del mes
- 12. Último día del mes en .NET
- 13. ¿Cómo obtener el mes de DateTime en mayúsculas?
- 14. Obtenga el mes a partir de DATETIME en sqlite
- 15. Calcular días del mes
- 16. SimpleDateFormat ignorando mes al analizar
- 17. Fecha de inicio y finalización de un mes actual
- 18. Analizando una fecha con el nombre del mes en C# DateTime
- 19. ¿Cómo puedo obtener el primer y último día del mes con DateTime de Perl?
- 20. Obtener el último día del mes?
- 21. Establecer unidades de diferencia entre objetos datetime
- 22. MPMoviePlayerController provoca un destello de negro al inicio del video
- 23. SQL Grupo A - registros de conteo al mes/año, el error de inserción - NO AL MES VÁLIDO
- 24. Como ir el pasado viernes del mes (s) utilizando .NET
- 25. ¿DateTime dentro del intervalo en JodaTime?
- 26. Establecer punto de inicio para CGAffineTransform
- 27. Establecer fondo de pantalla de inicio
- 28. ¿Cómo se encuentra el último día del mes?
- 29. Rieles: obtenga las fechas de inicio y finalización de la semana actual y del mes
- 30. cálculo del último día del mes
¿el comienzo del mes actual? –
, entonces, ¿qué hacer al respecto? ... la fecha de cada mes comienza con 1.. Quiere saber el Día al inicio del mes –
Si estamos en enero, debería mostrar 01-ene-2011 y en febrero, luego 01-feb-2011 – learning