C#日期格式超过1天

时间:2016-04-12 11:42:33

标签: c# datetime timespan

我正在尝试格式化日期,从现在开始,到几秒钟,几小时,甚至几天,类似Clash of Clans工作计时器这样:

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(80000);

return dateTime.ToString("H'h' mm'min'");

实际上很有效,我得到'22h 13分',只有几分钟和几小时。如果我尝试用它打印日子,就像这样:

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(80000);

return dateTime.ToString("d'd' H'h' mm'min'");

我将'1d 22h 13min'返回。因此,例如,如果我尝试将1天转换为秒(86400秒),则此代码将返回2天,而不是1天。

如果没有像返回日那样的硬减法等技巧,我怎样才能正确解决这个问题呢?

EDIT1: 例如,一天的预期结果是:

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(86400);
return dateTime.ToString("d'j' H'h' mm'min'");

返回2d 0h 00min,而不是1d 0h 00min。

3 个答案:

答案 0 :(得分:0)

您的代码dateTime = dateTime.AddSeconds(80000);会将值1/1/1970 10:13:20分配给dateTime变量,因此您1d 22h 13min的输出为dateTime.ToString("d'd' H'h' mm'min'");。因此,如果您想第二天到达,可以使用dateTime = dateTime.AddDays(1);或以秒为单位添加它。即。dateTime = dateTime.AddSeconds(86400);

答案 1 :(得分:0)

The "d" format specifier返回月份的日期。由于您将1天添加到1月1日,它将是1月2日,这就是此说明符返回2的原因。

如果我理解清楚,您可能想要使用TimeSpan代替。

TimeSpan ts = TimeSpan.FromSeconds(86400);
ts.ToString("d'd 'h'h 'mm'min'"); // 1d 0h 00min

TimeSpan ts = TimeSpan.FromSeconds(80000);
ts.ToString("d'd 'h'h 'mm'min'"); // 0d 22h 13min

然后你可以格式化这个值。

或者你可以使用DateTime.AddDays method来分析1天,如

dateTime = dateTime.AddDays(-1);
如果确实想使用dateTime,请

DateTime

答案 2 :(得分:0)

对于DateTime,日期是该月的某一天。你想要的是TimeSpan

var span = TimeSpan.FromSeconds(80000);
Console.WriteLine(span.ToString(@"d'd 'h'h 'm'min'"));

输出

  

0d 22h 13min