58

我有两个约会,一个比另一个少。我想创建一个这样的字符串

“0天0小时23分18秒”

表示两个日期之间的差异。我怎样才能得到这个字符串的这些元素?

4

9 回答 9

128

TimeSpan是您需要的对象:

TimeSpan span = (DateTime.Now - DateTime.Now);

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds);
于 2012-05-10T16:36:26.790 回答
14

当你DateTime从另一个中减去一个时,你会得到一个TimeSpan实例,它公开了这些值。

TimeSpan diff = DateTime.Now - DateTime.Today;
string formatted = string.Format(
                       CultureInfo.CurrentCulture, 
                       "{0} days, {1} hours, {2} minutes, {3} seconds", 
                       diff.Days, 
                       diff.Hours, 
                       diff.Minutes, 
                       diff.Seconds);
于 2012-05-10T16:36:20.593 回答
6

使用时间跨度

DateTime startTime = DateTime.Now;

DateTime endTime = DateTime.Now.AddSeconds( 75 );

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds",
    span.Days, span.Hours, span.Minutes, span.Seconds);
于 2012-05-10T16:39:12.030 回答
6

使用TimeSpan类,当您减去日期时会得到该类。

您可以使用标准自定义格式字符串格式化输出。

“0天0小时23分18秒”

可以有类似的东西:

TimeSpan ts = DateTime.Now - DateTime.Today;
Console.WriteLine(
   string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts)
);

IMO,它更干净,更容易使用string.Format,而不必转义格式字符串中的单词(如果您刚刚使用过,则需要.ToString)或手动构建它。

于 2012-05-10T16:46:21.527 回答
4

不要忘记,如果您希望此计算可移植,则需要将其存储为 UTC,然后在显示时将其转换为本地时间。作为一般规则,将日期存储为 UTC 并转换为本地时间以进行演示。

于 2016-07-12T00:11:53.510 回答
3

您是否尝试过使用

TimeSpan()

那当然可以做你想做的事

于 2012-05-10T16:36:29.803 回答
3

这样的事情怎么样?

    TimeSpan diff = dateTimeNew - dateTimeOld;
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
    Console.WriteLine(output);
于 2012-05-10T16:40:26.857 回答
3
    DateTime myDay = DateTime.Now;
    DateTime otherDate = DateTime.Now.AddYears(1);
    var test = otherDate.Subtract(myDay);
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" +  test.Minutes +"Seconds" + test.Seconds);

这里的测试是 TimeStamp 类型

于 2012-05-10T16:40:32.107 回答
2
TimeSpan diffTime = dateTimeNew -PreviousDate;
int days=diffTime.Days;
int hours=diffTime.Hours;
int minutes=diffTime.Minutes;
int seconds=diffTime.Seconds;
于 2016-03-22T12:16:49.533 回答