我有一个日期时间对象dt
,它保存了今天的日期。
DateTime dt = DateTime.Today;
DateTime idt = new DateTime();
我需要打印循环到达当前年度最后一天的日期,如下所示:
345 more days to 12/31/2012
如果我这样做的话
while (dt.AddDays(i).Year == dt.Year)
{
idt = dt.AddDays(i);
i++;
}
Console.WriteLine("{0} more days to {1}", i, idt.ToString("d"));
我可以按照我的要求进行打印:345 more days to 1/1/2012
我想避免在上面的部分重复dt.AddDays(i)
。如果我这样做:
while (idt.Year != dt.Year + 1)
{
idt = dt.AddDays(i);
i++;
}
Console.WriteLine("{0} more days to {1}", i, idt.ToString("d"));
或者这样:
while (idt.Year < 2013)
{
idt = dt.AddDays(i);
i++;
}
Console.WriteLine("{0} more days to {1}", i, idt.ToString("d"));
我得到的输出为346 more days to 1/1/2013
。
我肯定错过了一些非常明显的东西,但我无法弄明白。会是什么?
答案 0 :(得分:6)
您可以使用TimeSpan
来计算差异:
var nextYear = new DateTime(DateTime.UtcNow.Year, 31, 12);
var timeToNextYear = nextYear - DateTime.UtcNow.Date;
var daysToNextYear = timeToNextYear.TotalDays;
答案 1 :(得分:4)
为什么不
int days = new DateTime(dt.Year, 12, 31).Subtract(dt).Days;
答案 2 :(得分:1)
在这两种情况下,while循环中的条件在2012年12月31日评估为true,然后在循环内再添加一天,将idt设置为1/1/2013。
您可以像这样简单地获取一年中的剩余天数:
int days = (new DateTime(dt.Year, 12, 31) - dt).TotalDays;
答案 3 :(得分:1)
请注意,在此代码中
while (idt.Year < 2013)
{
idt = dt.AddDays(i);
i++;
}
idt.year在循环的前两次迭代中具有相同的值,因为您将递增0。
将其更改为:
while (idt.Year < 2013)
{
i++;
idt = dt.AddDays(i);
}
你会得到正确的结果。
顺便说一句,你可以做一个单行:
int days = (DateTime.Parse("1/1/" + ((DateTime.Now.Year) + 1).ToString()) - DateTime.Now).Days;
如果您的代码需要在各种语言环境中工作,那么您需要使用提供IFormatProvider的DateTime.Parse重载,以便1/1 / yyyy始终解析。