C# 日期与时间处理:DateTime、TimeSpan 及格式化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么在C#中处理日期很重要



在现代软件开发中,处理日期和时间是最常见且至关重要的任务之一。无论是事件日志记录、截止日期计算、新闻显示还是报告生成——精确而灵活的时间数据管理无处不在。C#和.NET平台为开发者提供了强大且直观的工具集来处理这些需求。



在本文中,我们将深入探讨C#中用于处理日期和时间的主要类型:DateTime、TimeSpan和DateTimeOffset。您将学习如何创建、修改、格式化和比较日期,以及如何正确处理时区。本文内容对初学者和希望系统化知识的有经验开发者都将有所帮助。



主要数据类型:DateTime、TimeSpan和DateTimeOffset



1. DateTime结构



DateTime是表示时间点(日期+时间)的主要类型。它存储从公元0001年1月1日到9999年12月31日的信息,精确到100纳秒(一个刻度)。



创建DateTime对象:

// 当前日期和时间DateTime now = DateTime.Now;// 当前UTC日期和时间DateTime utcNow = DateTime.UtcNow;// 指定日期DateTime specificDate = new DateTime(2025, 3, 15);// 精确到秒的日期和时间DateTime specificDateTime = new DateTime(2025, 3, 15, 14, 30, 0);// 今天的日期(时间 = 00:00:00)DateTime today = DateTime.Today;


2. TimeSpan结构



TimeSpan表示时间间隔(持续时间)。它不绑定到特定日期,而是存储时间差异:天、小时、分钟、秒和秒的小数部分。



创建和使用TimeSpan:

// 创建间隔:2天5小时30分钟TimeSpan interval = new TimeSpan(2, 5, 30, 0);// 从小时创建的间隔TimeSpan fromHours = TimeSpan.FromHours(48.5);// 两个日期之间的差异DateTime start = new DateTime(2025, 1, 1);DateTime end = new DateTime(2025, 3, 15);TimeSpan difference = end - start;Console.WriteLine(difference.Days); // 73


3. DateTimeOffset结构



DateTimeOffset是比DateTime更现代的替代方案,除了日期和时间外,它还存储相对于UTC的偏移量(例如+03:00)。这有助于避免在系统间传输数据时产生时区混淆。



// 当前时间及偏移量DateTimeOffset localOffset = DateTimeOffset.Now;// UTC时间及偏移量+00:00DateTimeOffset utcOffset = DateTimeOffset.UtcNow;// 使用指定偏移量创建DateTimeOffset specific = new DateTimeOffset(2025, 3, 15, 12, 0, 0, TimeSpan.FromHours(3));


基本操作:加法、减法和比较



DateTime和TimeSpan的算术运算



C#的主要优势之一是便捷的日期算术运算。您可以轻松添加或减去天、月、年,以及处理小时和分钟。



DateTime today = DateTime.Today;// 加10天DateTime futureDate = today.AddDays(10);// 加2个月DateTime futureMonth = today.AddMonths(2);// 减1年DateTime pastYear = today.AddYears(-1);// 加5小时30分钟DateTime precise = today.AddHours(5).AddMinutes(30);


使用TimeSpan:

TimeSpan workDay = new TimeSpan(8, 0, 0); // 8小时TimeSpan breakTime = new TimeSpan(0, 45, 0); // 45分钟TimeSpan totalWork = workDay + breakTime; // 8小时45分钟TimeSpan remaining = workDay - breakTime; // 7小时15分钟


比较日期



使用标准比较运算符来比较两个时间点:



Da                

博客

书籍推荐