it-swarm-ru.tech

установить DateTime на начало месяца

Как я могу установить DateTime на первый месяц месяца в C #?

90
learning
var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year,now.Month,1);
192
Nick Jones

Примерно так будет работать

DateTime firstDay = DateTime.Today.AddDays(1 - DateTime.Today.Day);
39
V4Vendetta

Немного опоздал на вечеринку, но вот метод расширения, который помог мне

public static class DateTimeExtensions
{
  public static DateTime FirstDayOfMonth(this DateTime dt)
  {
    return new DateTime(dt.Year, dt.Month, 1);
  }
}
7
Colin Banbury
public static DateTime FirstDayOfMonth(this DateTime current)
{
    return current.AddDays(1 - current.Day);
}
6
fubo

я только что создал несколько методов расширения, основанных на ответе Ника и других на 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 System.DateTime StartOfWeek(this System.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 System.DateTime StartOfMonth(this System.DateTime dt) =>
        new System.DateTime(dt.Year, dt.Month, 1);


    /// <summary>
    /// get datetime of the start of the year
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static System.DateTime StartOfYear(this System.DateTime dt) => 
         new System.DateTime(dt.Year, 1, 1);

}
2
Soren
DateTime now = DateTime.Now;
DateTime date = new DateTime(now.Year, now.Month, 1);

Вы можете использовать что-нибудь еще вместо DateTime.Now

2
rotman

Надеюсь, это поможет вам.

textbox1.Text = "01-" + DateTime.Now.ToString ("МММ-гггг");

0
Ann Sara

Это должно быть эффективно и правильно:

DateTime RoundDateTimeToMonth(DateTime time)
{
    long ticks = time.Ticks;
    return new DateTime((ticks / TimeSpan.TicksPerDay - time.Day + 1) * TimeSpan.TicksPerDay, time.Kind);
}

Здесь ticks / TimeSpan.TicksPerDay возвращает количество полных дней до указанного time, а - time.Day + 1 сбрасывает этот счет к началу месяца.

0
nayato