日期:2014-05-17  浏览次数:20747 次

一个关于Datetime的问题
比如说我声明一个dt1;Datetime dt1 = DateTime.Now; dt2取dt1向前推两个小时;DateTime dt2= dt1.AddHours(-2);
假设显示是月初,dt1 = 2012-10-01 00:12:00;如果按上面的方法,dt2 = 2012-09-30 22:12:00;有什么方法可以在跨月的时候让dt2= 2012-10-01 00:00:00,也就是说月不往前减。

------解决方案--------------------
判断:如果减去的小时数大于d1这个月的总小时数,就返回这个月的第一天;
C# code

//得到d1这个日期这个月的总小时数
DateTime.Now.Subtract(
new DateTime(DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.Ticks)
).TotalHours

------解决方案--------------------
C# code
DateTime dt1 = new DateTime(2012, 10, 1, 0, 12, 0);// DateTime.Now
DateTime dt2 = dt1.AddHours(-2);
if (dt2.Year < dt1.Year || dt2.Month < dt1.Month)
{
    dt2 = new DateTime(dt1.Year, dt1.Month, 1);
}

------解决方案--------------------
DateTime dt2= dt1.AddHours(-2);
if (dt2.Month < dt1.Month)
{
dt2 =new DateTime(dt1.Year, dt1.Month,1, 0, 0, 0);
}