是否可以将DateTime值精确克隆为Timespan数据类型。我通过减去最小值将日期时间转换为时间跨度。但是,它如何以DD MM YYYY HH MM SS格式显示。
TimeSpan timeSpan = (DateTime)startTimeValue - DateTime.MinValue;
答案 0 :(得分:0)
有点迟,但由于你没有得到任何关注,所以..
是否可以将DateTime值精确克隆为Timespan数据 型
嗯,因为您的示例完全有效,因为DateTime.MinValue
0
为Ticks
。它相当于;
TimeSpan timeSpan = TimeSpan.FromTicks(((DateTime)startTimeValue)Ticks);
如何以DD MM YYYY HH MM SS格式显示
首先,没有DD
,YYYY
和SS
作为custom date and time format specifiers。它们表示为dd
,yyyy
和ss
。
TimeSpan
与DateTime
完全不同。这是时间间隔,但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
}
}