常用一、5 个最常用的操作// 1. 获取当前时间 DateTime now DateTime.Now; // 2026-05-21 14:30:00 DateTime today DateTime.Today; // 2026-05-21 00:00:00 // 2. 格式化输出 now.ToString(yyyy-MM-dd HH:mm:ss); // 2026-05-21 14:30:00 now.ToString(yyyy/MM/dd); // 2026/05/21 // 3. 字符串转日期 DateTime.Parse(2026-05-21); DateTime.Parse(2026/05/21 14:30); // 安全版推荐 if (DateTime.TryParse(2026-05-21, out DateTime dt)) { Console.WriteLine(dt); } // 4. 日期相减 TimeSpan TimeSpan ts date2 - date1; Console.WriteLine(ts.TotalDays); // 相差几天 Console.WriteLine(ts.TotalHours); // 相差几小时 // 5. 日期加减 DateTime d1 now.AddDays(7); // 7 天后 DateTime d2 now.AddMonths(-1); // 1 个月前 DateTime d3 now.AddHours(2); // 2 小时后 DateTime d4 now.Add(TimeSpan.FromMinutes(30)); // 通用 Add(TimeSpan)二、常用格式化格式结果yyyy-MM-dd2026-05-21yyyy/MM/dd2026/05/21HH:mm:ss14:30:00yyyy-MM-dd HH:mm:ss2026-05-21 14:30:00yyyyMMdd20260521MM-dd05-21三、TimeSpanTimeSpan ts date2 - date1; ts.Days; // 整天数 ts.Hours; // 小时数不含天 ts.Minutes; // 分钟数不含小时 ts.Milliseconds; // 毫秒数 ts.TotalDays; // 总天数带小数 ts.TotalHours; // 总小时数带小数四、常用静态字段DateTime.Now // 当前时刻 DateTime.Today // 今天 0 点 DateTime.UtcNow // UTC 时间与时区无关 DateTime.MinValue // 最小日期 0001-01-01 DateTime.MaxValue // 最大日期 9999-12-31五、实用场景// 1. 记录操作时间 student.CreateTime DateTime.Now; // 2. 今天出生的人 DateTime today DateTime.Today; var result GetStudents(s s.BirthDate today); // 3. 文件命名 string fileName ${DateTime.Now:yyyyMMdd_HHmmss}.log; // 输出20260521_143000.log // 4. 程序运行耗时 DateTime start DateTime.Now; // ... 执行代码 ... TimeSpan elapsed DateTime.Now - start; Console.WriteLine($耗时{elapsed.TotalMilliseconds}ms);六、Unix 时间戳 ↔ DateTime设备传过来的时间经常是一个长整数秒数用DateTimeOffset转换。时间戳 → DateTimelong s 111111111; // 设备传来的秒数 DateTime tt DateTimeOffset.FromUnixTimeSeconds(s) // 转 UTC .LocalDateTime; // 转本地时区 Console.WriteLine(tt); // 1973/7/4 14:51:51北京时间毫秒级时间戳用FromUnixTimeMilliseconds。DateTime → 时间戳long s DateTimeOffset.Now.ToUnixTimeSeconds(); // 当前时间 → 秒数 long ms DateTimeOffset.Now.ToUnixTimeMilliseconds(); // 毫秒数为什么用 DateTimeOffset 而不是 DateTimeDateTime不知道自己是哪个时区DateTimeOffset带时区偏移转本地时间不会出错。Console.WriteLine(DateTimeOffset.Now); // 2026-05-21 14:30:00 08:00 Console.WriteLine(DateTime.Now); // 2026-05-21 14:30:00上位机接设备时用DateTimeOffset更安全避免时区搞错。七、提取日期各部分DateTime now DateTime.Now; int year now.Year; // 2026 int month now.Month; // 5 int day now.Day; // 21 int hour now.Hour; // 14 int min now.Minute; // 30 int sec now.Second; // 0 int week (int)now.DayOfWeek; // 40周日八、手动创建 TimeSpanTimeSpan ts1 TimeSpan.FromSeconds(30); // 30秒 TimeSpan ts2 TimeSpan.FromMinutes(5); // 5分钟 TimeSpan ts3 TimeSpan.FromHours(1.5); // 1.5小时 TimeSpan ts4 TimeSpan.FromMilliseconds(500); // 500毫秒 TimeSpan ts5 new TimeSpan(1, 30, 0); // 1小时30分九、测耗时用 Stopwatch不要用 DateTime.Now// ❌ DateTime.Now 精度约 15ms短操作测不准 DateTime start DateTime.Now; DoSomething(); TimeSpan elapsed DateTime.Now - start; // ✅ Stopwatch 精度微秒级 Stopwatch sw Stopwatch.StartNew(); DoSomething(); sw.Stop(); Console.WriteLine(${sw.ElapsedMilliseconds}ms); // 毫秒 Console.WriteLine(${sw.Elapsed.TotalSeconds}s); // 秒上位机测相机采图耗时、算法处理耗时都用Stopwatch。十、比较日期// 直接比较比较到刻度包含时间 if (dt1 dt2) { } if (dt1 dt2) { } int result dt1.CompareTo(dt2); // -1小于 0等于 1大于 // 只比较年月日忽略时间 if (dt1.Date dt2.Date) { } if (dt1.Date dt2.Date) { }十一、常见坑坑 1DateTime.Now 每次调用值不同// ❌ 多次调用 Now可能得到不同值 if (dt DateTime.Now dt DateTime.Now.AddMinutes(5)) // 中间 NOW 可能变了 // ✅ 存一次变量复用 DateTime now DateTime.Now; if (dt now dt now.AddMinutes(5))坑 2格式化大小写yyyy → 年份小写 MM → 月份大写 mm → 分钟小写 HH → 24小时制大写 hh → 12小时制小写 ss → 秒小写坑 3没收到数据时 DateTime.MinValueDateTime lastTime DateTime.MinValue; // 0001-01-01 // 判断是否从未更新过 if (lastTime DateTime.MinValue) { }坑 4数据库存时间用 UTC上位机项目一般不用注意多个设备跨时区才需要考虑。十二、其他实用方法// 某个月有多少天 int days DateTime.DaysInMonth(2026, 5); // 31 // 指定格式解析比 TryParse 更严格 if (DateTime.TryParseExact(2026-05-21, yyyy-MM-dd, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt)) { } // 可空日期 DateTime? birthday null; if (birthday.HasValue) { }十三、不用背的部分遇到再查IsDaylightSavingTime → 是否夏令时 FromFileTime → NTFS 文件时间转 DateTime ToLocalTime → UTC → 本地 ToUniversalTime → 本地 → UTC DateTimeStyles → 解析时的选项如忽略时区总结获取当前时间 → DateTime.Now注意存变量复用 格式化 → .ToString(yyyy-MM-dd HH:mm:ss) 字符串解析 → DateTime.TryParse() / TryParseExact() 提取各部分 → .Year .Month .Day .Hour .Minute .Second Unix秒数→时间 → DateTimeOffset.FromUnixTimeSeconds(n).LocalDateTime 时间→Unix秒数 → DateTimeOffset.Now.ToUnixTimeSeconds() 时间差 → TimeSpan ts t2 - t1 手动创建间隔 → TimeSpan.FromSeconds() / FromMinutes() 日期加减 → now.AddDays(7) / Add(TimeSpan) 比较日期 → 或 .Date 忽略时间比较 测耗时 → Stopwatch.StartNew() 不要用 DateTime.Now