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