我想要得到给定日期所在月份的第一天和最后一天。日期来自UI字段中的值。
如果我使用时间选择器,我可以说
var maxDay = dtpAttendance.MaxDate.Day;
但我试图从DateTime对象中获取它。如果我有这个。
DateTime dt = DateTime.today;
如何从dt中获取每月的第一天和最后一天?
我想要得到给定日期所在月份的第一天和最后一天。日期来自UI字段中的值。
如果我使用时间选择器,我可以说
var maxDay = dtpAttendance.MaxDate.Day;
但我试图从DateTime对象中获取它。如果我有这个。
DateTime dt = DateTime.today;
如何从dt中获取每月的第一天和最后一天?
当前回答
你可以试着得到本月的第一天;
DateTime.Now.AddDays(-(DateTime.Now.Day-1))
给它赋一个值。
是这样的:
dateEndEdit.EditValue = DateTime.Now;
dateStartEdit.EditValue = DateTime.Now.AddDays(-(DateTime.Now.Day-1));
其他回答
DateTime dCalcDate = DateTime.Now;
dtpFromEffDate.Value = new DateTime(dCalcDate.Year, dCalcDate.Month, 1);
dptToEffDate.Value = new DateTime(dCalcDate.Year, dCalcDate.Month, DateTime.DaysInMonth(dCalcDate.Year, dCalcDate.Month));
如果你只关心日期的话
var firstDay = new DateTime(date.Year, date.Month, 1, 0, 0, 0, date.Kind);
var lastDay = new DateTime(date.Year, date.Month, 1, 0, 0, 0, date.Kind).AddMonths(1).AddDays(-1);
如果你想节省时间
var firstDay = new DateTime(date.Year, date.Month, 1, date.Hour, date.Minute, date.Second, date.Kind);
var lastDay = new DateTime(date.Year, date.Month, 1, date.Hour, date.Minute, date.Second, date.Kind).AddMonths(1).AddDays(-1);
很简单
Begin = new DateTime(DateTime.Now.Year, DateTime.Now.Month,1).ToShortDateString();
End = new DataFim.Text = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)).ToShortDateString();
这里接受的答案没有考虑到DateTime实例的Kind。例如,如果您的原始DateTime实例是UTC Kind,那么通过创建一个新的DateTime实例,您将创建一个Unknown Kind实例,然后根据服务器设置将其视为本地时间。因此,获取每月第一个和最后一个日期的更正确的方法是:
var now = DateTime.UtcNow;
var first = now.Date.AddDays(-(now.Date.Day - 1));
var last = first.AddMonths(1).AddTicks(-1);
这样就保留了DateTime实例的原始Kind。
“一个月的最后一天”实际上是“下个月的第一天,减1”。所以这是我使用的,不需要“DaysInMonth”方法:
public static DateTime FirstDayOfMonth(this DateTime value)
{
return new DateTime(value.Year, value.Month, 1);
}
public static DateTime LastDayOfMonth(this DateTime value)
{
return value.FirstDayOfMonth()
.AddMonths(1)
.AddMinutes(-1);
}
注意: 我在这里使用AddMinutes(-1)而不是AddDays(-1)的原因是,通常你需要这些日期函数来报告一些日期-期间,当你构建一个期间的报告时,“结束日期”实际上应该是类似于2015年10月31日23:59:59这样的东西,这样你的报告就可以正确地工作-包括当月最后一天的所有数据。
也就是说,你实际上是在“这个月的最后一刻”。不是最后一天。
好了,我要闭嘴了。