超过 1 天的 C# 日期格式

C# date format over 1 day

我正在尝试将日期格式化为从现在到几秒、几小时,也许几天,类似于 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'");

实际上效果很好,我得到“22 小时 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”returned。因此,例如,如果我尝试将 1 天转换为秒 (86400sec),此代码将 return 2 天,而不是 1 天。

如果不使用硬减 1 之类的技巧,我如何才能正确解决这个问题 returned?

编辑1: 例如,一天的预期结果是:

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'");

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

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

The "d" format specifier returns 月中的天数。由于您将 1 天添加到 1 月 1 日,因此将是 1 月 2 日,这就是此说明符 returns 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.

对于 DateTime,day 是一个月中的第几天。你想要的是 TimeSpan.

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

产出

0d 22h 13min