C# 中日期与时间操作入门
日期与时间的处理是软件开发中的基础任务之一。无论是事件日志记录、截止日期计算、报告生成,还是与数据库交互——正确管理时间数据都至关重要。在 C#(.NET 平台)中,有强大且灵活的工具集可用于这些目的,包括 DateTime、TimeSpan 和 DateTimeOffset 结构。
在本文中,我们将深入探讨 C# 中日期与时间操作的所有关键方面。您将学习如何创建、格式化、比较和处理时间数据,并了解帮助您避免常见错误的最佳实践。
核心结构:DateTime、TimeSpan 和 DateTimeOffset
DateTime 结构
DateTime 是表示时间点(日期 + 时间)的主要结构。它可以表示从 0001 年 1 月 1 日到 9999 年 12 月 31 日的值。
创建 DateTime 对象:
// 当前日期和时间DateTime now = DateTime.Now;DateTime utcNow = DateTime.UtcNow;
// 特定日期和时间DateTime specificDate = new DateTime(2025, 3, 15, 14, 30, 0); // 2025年3月15日 14:30:00
// 从字符串解析DateTime parsedDate = DateTime.Parse("2025-03-15");
// 使用 TryParse 进行安全解析if (DateTime.TryParse("2025-03-15", out DateTime result)){ Console.WriteLine($"解析成功: {result}");}关键属性和方法:
Date— 仅返回日期(时间 = 00:00:00)Year、Month、Day、Hour、Minute、Second— 各个组成部分DayOfWeek— 星期几(枚举)AddDays()、AddMonths()、AddYears()— 日期算术运算AddHours()、AddMinutes()、AddSeconds()— 时间算术运算
TimeSpan 结构
TimeSpan 表示时间间隔(两个时刻之间的差距)。它不是一个日期,而是一个具体的持续时间。
// 创建 TimeSpanTimeSpan interval = new TimeSpan(2, 15, 30); // 2小时15分钟30秒
// 两个日期之间的差异DateTime start = new DateTime(2025, 1, 1);DateTime end = new DateTime(2025, 1, 10);TimeSpan difference = end - start; // 9天
// TimeSpan 属性Console.WriteLine($"天数: {difference.Days}"); // 9Console.WriteLine($"总小时数: {difference.TotalHours}"); // 216Console.WriteLine($"总分钟数: {difference.TotalMinutes}"); // 12960
// TimeSpan 算术运算TimeSpan workDay = new TimeSpan(8, 0, 0); // 8小时TimeSpan breakTime = new TimeSpan(1, 0, 0); // 1小时TimeSpan actualWork = workDay - breakTime; // 7小时DateTimeOffset 结构
DateTimeOffset 是 DateTime 的增强版本,它考虑了相对于 UTC 的偏移量。这对于处理来自不同时区用户的应用程序至关重要。
// 考虑时区的当前时间DateTimeOffset nowOffset = DateTimeOffset.Now;
// 使用指定偏移量创建DateTimeOffset withOffset = new DateTimeOffset(2025, 3, 15, 14, 0, 0, TimeSpan.FromHours(3));
// 时区之间的转换DateTimeOffset utc = withOffset.ToUniversalTime();DateTimeOffset local = withOffset.ToLocalTime();
// 获取偏移量Console.WriteLine($"偏移量: {withOffset.Offset}"); // +03:00何时使用 DateTimeOffset 而不是 DateTime? 如果您的应用程序与来自不同时区的用户交互,或者以 UTC 存储数据,请使用 DateTimeOffset。这可以防止