我正在尝试格式化日期,从现在开始,到几秒钟,几小时,甚至几天,类似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。
答案 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