.NET 时间月份处理
一次项目,需要对统计输入时间范围内,按月统计区间内数据量
差了很多资料,参考园子里的方案,自行写了个方法实现
代码如下:
/// <summary>
/// 获取本月月初, 本月第一天
/// </summary>
/// <param name="dateTime">当前时间 DateTime.Now or DateTime.UtcNow</param>
/// <returns>后面的具体时、分、秒和传入值相等</returns>
public static DateTime GetMonthFirstDate(DateTime dateTime)
{
// 本月月初
return dateTime.AddDays(1 - dateTime.Day);
}
/// <summary>
/// 获取本月月末, 本月最后一天
/// </summary>
/// <param name="dateTime">当前时间 DateTime.Now or DateTime.UtcNow</param>
/// <returns>后面的具体时、分、秒和传入值相等</returns>
public static DateTime GetMonthLastDate(DateTime dateTime)
{
// 本月月末
return GetMonthFirstDate(dateTime).AddMonths(1).AddDays(-1);
}
获取日期按照月份返回指定日期到月末或者月初到指定结束日期
/// <summary>
/// 按年按月按日-返回时间list
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public static Dictionary<DateTime, DateTime> DateTimeMonths(DateTime startTime, DateTime endTime)
{
try
{
var endTimeMonth = GetMonthLastDate(endTime);
var dic = new Dictionary<DateTime, DateTime>();
for (DateTime? dt = startTime; dt <= endTimeMonth; dt = dt.Value.AddMonths(1))
{
var beginDay = new DateTime();
var finishDay = new DateTime();
if (dt.Value.Year == startTime.Year && dt.Value.Month == startTime.Month)
{
if (dt.Value.Year == endTime.Year && dt.Value.Month == endTime.Month)
{
beginDay = startTime;
finishDay = endTime;
dic.Add(beginDay, finishDay);
}
else
{
beginDay = startTime;
finishDay = GetMonthLastDate(startTime);
dic.Add(beginDay, finishDay);
}
}
else if (dt.Value.Year == endTime.Year && dt.Value.Month == endTime.Month)
{
beginDay = GetMonthFirstDate(endTime);
finishDay = endTime;
dic.Add(beginDay, finishDay);
}
else
{
beginDay = GetMonthFirstDate(dt.Value);
finishDay = GetMonthLastDate(dt.Value);
dic.Add(beginDay, finishDay);
}
}
return dic;
}
catch (Exception ex)
{
return null;
}
}

浙公网安备 33010602011771号