一、常用静态成员(直接通过DateTime类调用,多用于创建、判断)
这些是开发中最常调用的静态方法/字段:
| 成员 | 作用 | 示例 |
|---|---|---|
DateTime.Now | 获取当前操作系统本地时区的当前日期时间 | DateTime now = DateTime.Now; |
DateTime.UtcNow | 获取当前UTC(协调世界时)时间,多时区开发推荐存储用UTC | DateTime utcNow = DateTime.UtcNow; |
DateTime.Today | 获取本地时区今天的零点日期(时间部分为00:00:00) | DateTime today = DateTime.Today; |
DateTime.MinValue / DateTime.MaxValue | 表示DateTime能表示的最小/最大日期,多用于初始化、范围判断 | DateTime defaultDate = DateTime.MinValue; |
DateTime.IsLeapYear(int year) | 静态方法,判断指定年份是否为闰年 | bool is2024Leap = DateTime.IsLeapYear(2024); // 返回true |
DateTime.DaysInMonth(int year, int month) | 静态方法,获取指定年月的总天数 | int days = DateTime.DaysInMonth(2024,2); // 返回29(闰年2月) |
DateTime.TryParse(string str, out DateTime result) | 安全地将字符串解析为DateTime,解析失败不抛异常,返回false | csharp if(DateTime.TryParse("2024-05-20", out var dt)) { // 解析成功使用dt } |
DateTime.TryParseExact(string str, string format, ...) | 按指定格式解析字符串,适合固定格式的日期转换,准确性更高 | csharp // 严格解析"yyyy-MM-dd"格式的字符串 DateTime.TryParseExact("2024-05-20", "yyyy-MM-dd", null, DateTimeStyles.None, out dt); |
DateTime.Parse / DateTime.ParseExact | 和上面两个Try方法对应,解析失败直接抛出异常,适合确定格式合法的场景 | |
DateTime.Compare(DateTime dt1, DateTime dt2) | 比较两个时间的先后,返回值: 负整数 → dt1更早;0 → 相等;正整数 → dt1更晚 |
二、常用实例属性(从DateTime对象获取时间分量)
创建DateTime对象后,常用属性获取时间的各个部分:
DateTime dt = new DateTime(2024, 5, 20, 14, 30, 15);
dt.Year // 2024 年
dt.Month // 5 月
dt.Day // 20 日
dt.Hour // 14 时(24小时制)
dt.Minute // 30 分
dt.Second // 15 秒
dt.DayOfWeek // Monday (星期几,枚举值)
dt.DayOfYear // 141 (今年第几天)
dt.Kind // Unspecified/Local/Utc 标识该时间的时区类型
三、常用实例方法(操作DateTime对象)
| 方法 | 作用 | 示例 |
|---|---|---|
AddYears(int years) / AddMonths(int months) / AddDays(double days) / AddHours(double hours) / AddMinutes(double minutes) / AddSeconds(double seconds) | 对当前时间加上指定时长,支持传负数实现减法,返回新的DateTime对象(原对象不变) | csharp // 3天后的日期 DateTime after3Days = DateTime.Now.AddDays(3); // 2小时前的时间 DateTime before2h = DateTime.Now.AddHours(-2); |
Subtract() | 两个重载: 1. 减去另一个时间,得到时间间隔 TimeSpan2. 减去一个 TimeSpan,得到新的DateTime | csharp TimeSpan span = dtEnd.Subtract(dtStart); // 两个时间差 |
ToUniversalTime() | 将当前本地时间转换为UTC时间 | DateTime utc = dt.ToUniversalTime(); |
ToLocalTime() | 将当前UTC时间转换为本地时区时间 | DateTime local = utc.ToLocalTime(); |
ToString(string format) | 按指定格式把时间转成字符串,最常用 | dt.ToString("yyyy-MM-dd HH:mm:ss"); // 输出 2024-05-20 14:30:15 |
ToShortDateString() | 转短日期字符串(比如 2024/5/20) | |
ToLongDateString() | 转长日期字符串(比如 2024年5月20日) |
也支持直接用运算符做时间运算:
TimeSpan diff = dt2 - dt1; // 两个时间的间隔 DateTime newDt = dt1 + new TimeSpan(3, 0, 0); // dt1加3小时
四、常用开发场景示例
获取当月第一天/最后一天:
DateTime now = DateTime.Now;
DateTime firstDay = new DateTime(now.Year, now.Month, 1); // 当月第一天
DateTime lastDay = firstDay.AddMonths(1).AddDays(-1); // 当月最后一天
计算两个时间相差多少天:
double totalDays = (endDate - startDate).TotalDays;
五、常见注意事项
- 格式化字符串的大小写区别:
MM是月份,mm是分钟;HH是24小时制,hh是12小时制,非常容易写错。 DateTime.Kind属性会影响时区转换结果,转换时间前尽量保证Kind值和时间的实际时区匹配,避免转换错误。- 新开发涉及多时区场景,推荐搭配
TimeZoneInfo使用或直接用DateTimeOffset类型,比单纯用DateTime更不容易出错。

8万+

被折叠的 条评论
为什么被折叠?



