在C#中将DateTime(DD MM YYYY HH MM SS)转换为Timespan,如(DD MM YYYY HH MM SS)

时间:2015-07-09 03:31:37

标签: c# datetime string-formatting timespan

是否可以将DateTime值精确克隆为Timespan数据类型。我通过减去最小值将日期时间转换为时间跨度。但是,它如何以DD MM YYYY HH MM SS格式显示。

TimeSpan timeSpan = (DateTime)startTimeValue - DateTime.MinValue;

1 个答案:

答案 0 :(得分:0)

有点迟,但由于你没有得到任何关注,所以..

  

是否可以将DateTime值精确克隆为Timespan数据   型

,因为您的示例完全有效,因为DateTime.MinValue 0Ticks。它相当于;

TimeSpan timeSpan = TimeSpan.FromTicks(((DateTime)startTimeValue)Ticks);
  

如何以DD MM YYYY HH MM SS格式显示

首先,没有DDYYYYSS作为custom date and time format specifiers。它们表示为ddyyyyss

TimeSpanDateTime完全不同。这是时间间隔,但DateTime及时是。如您所见,时间间隔不能包含任何月份和年份。其中Calendar?并非所有日历都有12个月。究竟在哪个月? GregorianCalender中有29天有多少个月?还是ChineseLunisolarCalendar?这取决于,对吧?对于TimeSpan来说,月份和年份的概念是不合时宜的。

仍然是,您可以使用TimeSpan.ToString()方法将TimeSpan格式化为日,小时,分钟和秒;

timeSpan.ToString(@"d\.hh\:mm\:ss")

作为更好的替代方案,您可以使用具有Period类和PeriodUnits枚举的Nodatime,您可以计算这些;

using System;
using NodaTime;

public class Program
{
    public static void Main()
    {
        LocalDate start = new LocalDate(2010, 11, 20);
        LocalDate end = new LocalDate(2015, 7, 13);

        Period period = Period.Between(start, end, 
                                       PeriodUnits.Months | PeriodUnits.Years);

        Console.WriteLine("{0} - {1}", period.Months, period.Years); // 7 - 4
    }
}