本文介绍如何使用DateTime和TimeSpan等类型处理日期和时间,包括日期和时间的基本概念、DateTime结构成员、日期和时间的推算、日期和时间的格式化等内容。
Tick(时钟的滴答声),是.NET Framework环境中处理时间的最小单位,1Tick表示一毫秒的万分之一,即一秒有1000万Ticks。
日期和处理范围,可以使用DateTime结构的MinValue和MaxValue字段读取,这两个字段的类型依然是DateTime结构类型,同时,可以使用Ticks属性获取日期和时间的整数处理范围,下面的代码显示了相关的数据。
using System; namespace csfx_demo { class Program { static void Main(string[] args) { Console.WriteLine(DateTime.MinValue); // 0001/1/1 0:00:00 Console.WriteLine(DateTime.MinValue.Ticks); // 0 Console.WriteLine(DateTime.MaxValue); // 9999/12/31 23:59:59 Console.WriteLine(DateTime.MaxValue.Ticks); // 3155378975999999999 } } }
从代码输出中可以看到,DateTime结构处理的最小时间为公元1年1月1日的0点,此时的Ticks值为0;最大的时间点为公元9999年12月31日23点59分59秒。
UTC时间与时区。UTC是协调世界时间,世界各地处理时间的标准。全球分为24个时区,即每15个经度一个时区,0时区以格林尼台天文台东西各7.5度,然后向东为东区(正区),共11个时区,北京时间位于东八区(+08:00);格林尼台向西称为西区(负区),共12个时区。由西12区到东11区时,日期要加一天。
DateTime结构是处理日期和时间的主要类型,定义在System命名空间。DateTime结构的常用构造函数包括:
DateTime结构常用的静态成员有:
从DateTime中读取具体的日期和时间要素时,可以使用如下属性:
DateTime结构中常用的转换方法有:
日期和时间推算时,可以使用DateTime结构的如下方法:
这些方法都使用一个数值作为参数,设置为正数时向后推算,设置为负数时向前推算;请注意参数类型,根据年和月推算时需要使用int类型,因为每年和每月的天数可能不同;根据Tick值推算时参数为long类型;其它方法使用double类型。下面的代码演示了日期和时间的推算。
using System; namespace csfx_demo { class Program { static void Main(string[] args) { DateTime dt = new DateTime(2026, 3, 1, 6, 0, 0); Console.WriteLine(dt.AddYears(3)); // 2029/3/1 6:00:00 Console.WriteLine(dt.AddMonths(15)); // 2027/6/1 6:00:00 Console.WriteLine(dt.AddDays(1.5)); // 2026/3/2 18:00:00 } } }
DateTime结构的Subtract()方法可以计算两个时间点的间隔,参数为DateTime类型,返回值为TimeSpan类型,可以使用如下属性获取间隔的日期和时间数据:
下面的代码演示了Subtract()方法和读取时间间隔信息的应用。
using System; namespace csfx_demo { class Program { static void Main(string[] args) { DateTime dt1 = new DateTime(2026, 3, 1, 6, 0, 0); DateTime dt2 = new DateTime(2026, 3, 2, 18, 0, 0); TimeSpan ts = dt1.Subtract(dt2); Console.WriteLine(ts.Days); // -1 Console.WriteLine(ts.TotalDays); // -1.5 Console.WriteLine(ts.Hours); // -12 } } }
代码中,dt1.Subtract(dt2)执行的是dt1-dt2操作,其中,dt1比dt2早了一天12小时间;第一个输出,只读取天的分量数,表示dt1比dt2早了一天;第二个输出,读取以天为单位的全部数据,即dt1比dt2早了一天半(1.5);第三个输出读取了小时的分量值,dt1比dt2早了12个小时。本例,使用dt2.Subtract(dt1)计算结果会显示为正数。
DateTime结构中包含了一些基本的日期和时间格式化方法:
ToString()方法中,如果不带参数,则显示为ToShortDateString()和ToLongTimeString()方法的组合,日期和时间中间使用空格分隔。下面的代码演示了相关应用,请注意,系统设置为北京时间时区,语言为简体中文。
using System; namespace csfx_demo { class Program { static void Main(string[] args) { DateTime dt = new DateTime(2026, 3, 1, 6, 0, 0); Console.WriteLine(dt.ToString()); // 2026/3/1 6:00:00 Console.WriteLine(dt.ToLongDateString()); // 2026年3月1日 Console.WriteLine(dt.ToShortDateString()); // 2026/3/1 Console.WriteLine(dt.ToLongTimeString()); // 6:00:00 Console.WriteLine(dt.ToShortTimeString()); // 6:00 } } }
ToString()方法的参数还可以使用字符串指定日期和时间的格式化字符,如:
下面的代码演示了自定义格式化日期和时间的基本应用。
using System; namespace csfx_demo { class Program { static void Main(string[] args) { DateTime dt = new DateTime(2026, 3, 1, 6, 22, 33); Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss.fff")); } } }
执行代码显示为“2026/03/01 06:22:33.000”。