How do I get the last day of a month?
我怎样才能在C中找到这个月的最后一天?
例如,如果我的日期是1980年8月3日,我如何获得8月的最后一天(在本例中是31天)?
- @马克:我能问什么?我想你自己的答案不需要扩展方法。
- 最后一天不是只针对月份,你也需要年份。2010年2月的最后一天是28天,但2008年2月的最后一天是29天。
- @Abatishchev它不需要扩展方法,但问题并不真正需要它。然而,至少对我来说,看到它一个,它就更美好、更可读了。扩展方法更像是一种建议。任何解决方案都可以在扩展方法中工作,而不仅仅是我的。
每月的最后一天,您会得到这样的结果,返回31:
1
| DateTime.DaysInMonth(1980, 08); |
- public static datetime converttolastdayofmonth(datetime date)返回新的datetime(date.year,date.month,datetime.daysinmonth(date.year,date.month));以日期格式获取月份的最后一天
1
| var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month); |
- @亨克,实际上我是从我们源头的一个地方得到的,这个地方创造了DateTime,来自lastDayOfMonth。老实说,任何一种方法都非常有效。这是一个学究式的争论,哪种方式更好。我做了两种方法,都给出了相同的答案。
1 2
| DateTime firstOfNextMonth = new DateTime (date .Year, date .Month, 1).AddMonths(1);
DateTime lastOfThisMonth = firstOfNextMonth .AddDays(-1); |
- "如何获取一个月的最后一天?".datetime.days in month(year,month)将返回月份中有多少天,这将返回相同的答案"月份的最后一天是什么"。你的方法是可行的,但我认为对于一件简单的事情来说,代码太多了。
- @rochasdv this datetime.daysinmonth(year,month)将返回int,但我需要datetime对象。在这种情况下,两个答案代码是相等的。int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); DateTime lastDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
如果你想要一个月一年的日期,这似乎是正确的:
1 2 3 4
| public static DateTime GetLastDayOfMonth (this DateTime dateTime )
{
return new DateTime (dateTime .Year, dateTime .Month, DateTime .DaysInMonth(dateTime .Year, dateTime .Month));
} |
从下个月的第一天减去一天:
1
| DateTime lastDay = new DateTime (MyDate .Year,MyDate .Month+1, 1).AddDays(-1); |
此外,如果您还需要它在12月工作:
1
| DateTime lastDay = new DateTime (MyDate .Year,MyDate .Month, 1).AddMonths(1).AddDays(-1); |
您可以通过一行代码找到月份的最后一天:
1
| int maxdt = (new DateTime (dtfrom .Year, dtfrom .Month, 1).AddMonths(1).AddDays(-1)).Day; |
- 我想知道,为什么有人要寻找这种不可读和复杂的方法来实现它,而不是简单的方法:DateTime.DaysInMonth!?—但作为有效的解决方案是可以接受的;)。
您可以通过此代码找到任何月份的最后一个日期:
1 2 3 4
| var now = DateTime .Now;
var startOfMonth = new DateTime (now .Year, now .Month, 1);
var DaysInMonth = DateTime .DaysInMonth(now .Year, now .Month);
var lastDay = new DateTime (now .Year, now .Month, DaysInMonth ); |
来自DateTimePicker:。
< >第一次约会:
1
| DateTime first_date = new DateTime (DateTimePicker .Value.Year, DateTimePicker .Value.Month, 1); |
最后日期:
1
| DateTime last_date = new DateTime (DateTimePicker .Value.Year, DateTimePicker .Value.Month, DateTime .DaysInMonth(DateTimePicker .Value.Year, DateTimePicker .Value.Month)); |
要获取特定日历和扩展方法中月份的最后一天,请执行以下操作:
1 2 3 4 5 6 7
| public static int DaysInMonthBy(this DateTime src, Calendar calendar)
{
var year = calendar.GetYear(src); // year of src in your calendar
var month = calendar.GetMonth(src); // month of src in your calendar
var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar
return lastDay;
} |
1 2 3
| // Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime (1980, 8, 3);
var lastDayOfMonth = new DateTime (myDate .Year, myDate .Month, DateTime .DaysInMonth(myDate .Year, myDate .Month)); |
- 这个答案只回答提问者的例子。一个更全面的答案会更有帮助。
- 您可以使用任意日期作为输入值,因此您可以将此解决方案应用于任意日期。
- 它会在某些日期失败,请尝试var myDate = new DateTime(1980, 1, 31);(返回第29个日期)
- Hans Ke?嗯,你说得对。如果下个月的天数少于当前的天数,则此方法将失败。我想最简单的方法是使用datetime.daysinmonth(),但这是公认的答案,所以我的答案应该被删除。
我不知道C,但是,如果事实证明没有一种方便的API方法来获取它,那么您可以通过以下逻辑来实现这一点:
1
| today -> +1 month -> set day of month to 1 -> -1 day |
当然,这假设您有这种类型的日期数学。