c# 如何获取当前时间

来源:这里教程网 时间:2026-02-21 17:40:41 作者:

直接用
DateTime.Now
获取本地当前时间

绝大多数场景下,

DateTime.Now
就是你需要的答案。它返回一个
DateTime
对象,包含当前系统本地时区的年、月、日、时、分、秒和毫秒。

注意:它依赖系统时钟和时区设置,不是 UTC 时间,也不自动处理夏令时切换逻辑(但 Windows 系统层会参与调整)。

DateTime now = DateTime.Now;
Console.WriteLine(now); // 输出类似:2024-06-12 14:35:22.123

需要 UTC 时间时用
DateTime.UtcNow

如果做跨时区服务、日志时间戳、或与数据库/HTTP API 交互(尤其 RESTful 接口常要求 ISO 8601 UTC 格式),必须用

DateTime.UtcNow
,否则可能引发时区错乱或比对错误。

DateTime.Now
DateTime.UtcNow
的值通常相差几个小时,具体取决于本地时区偏移
两者都包含毫秒,精度取决于系统时钟(通常为 10–15ms) 不要对
DateTime.Now
做减法再转 UTC——结果不可靠,直接用
UtcNow
DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow.ToString("o")); // ISO 8601 格式:2024-06-12T06:35:22.1234567Z

格式化输出要小心文化差异

ToString()
默认使用当前线程的
CultureInfo
,可能导致月/日顺序颠倒(如美国 vs 德国),影响日志解析或前端展示。

固定格式推荐用标准格式字符串,比如
"yyyy-MM-dd HH:mm:ss"
需要 ISO 8601 且带时区信息,用
"o"
(Round-trip 格式)或
"u"
(UTC 格式)
避免用
ToString()
无参数调用,尤其在服务器环境(线程文化可能非预期)
DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("yyyy-MM-dd HH:mm:ss")); // 安全、明确

高精度或性能敏感场景考虑
Stopwatch
DateTimeOffset

DateTime
不适合测量耗时(精度低、有系统时钟跳变风险),也不方便表达“带时区偏移的时间点”。这时候:

测执行时间用
Stopwatch
,它基于高精度计时器(
QueryPerformanceCounter
记录带明确时区上下文的时间点(如用户提交时间 + 当地偏移),用
DateTimeOffset
,例如
DateTimeOffset.Now
DateTimeOffset.Now
DateTime.Now
多存一个
Offset
,能无歧义还原 UTC 时间
DateTimeOffset nowOffset = DateTimeOffset.Now;
Console.WriteLine(nowOffset.ToString("o")); // 2024-06-12T14:35:22.1234567+08:00
时区偏移、UTC 意识、格式化上下文——这三个点在真实项目里最容易被忽略,一出问题就难定位。

相关推荐