Last day of the month in .NET

后端 未结 5 1681
闹比i
闹比i 2020-12-30 20:12

Normally I use the below code, but is there a better way?

lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1)
相关标签:
5条回答
  • 2020-12-30 20:20

    Here is how you can get the number of days in the month using Noda Time:

    int days = CalendarSystem.Iso.GetDaysInMonth(year, month);
    

    Pretty simple, eh? Well that assumes you know the year and month you are asking about. If you want it for the current month, and in the system's time zone, then you have to specify that explicitly, like this:

    DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
    LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date;
    int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month);
    

    Noda Time intentionally makes you think about these things, instead of just making the assumptions that DateTime.Now or DateTime.Today do.

    0 讨论(0)
  • 2020-12-30 20:31

    I would probably use DaysInMonth as it makes the code a bit more readable and easier to understand (although, I really like your trick :-)). This requieres a similar ammount of typing (which is quite a lot), so I would probably define an extension method:

    DateTime LastDayOfMonth(this DateTime) {
      var days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
      return new DateTime(DateTime.Now.Year, DateTime.Now.Month, days);
    }
    

    Now we can use DateTime.Now.LastDayOfMonth() which looks a lot better :-).

    0 讨论(0)
  • 2020-12-30 20:35

    You can use CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(Now.Year, Now.Month)

    0 讨论(0)
  • 2020-12-30 20:36

    I use

    DateTime now = DateTime.Today;
    var lastDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));
    
    0 讨论(0)
  • 2020-12-30 20:36
    DateTime(year, month, DateTime.DaysInMonth(year, month)).
    
    0 讨论(0)
提交回复
热议问题