通八洲科技

c# datetime 格式化大全

日期:2026-01-02 00:00 / 作者:月夜之吻
C#中DateTime.ToString()是格式化唯一核心入口,仅含标准格式符与自定义格式字符串两套机制;90%错误源于大小写误用、文化依赖忽略及mm(分钟)与MM(月份)混淆。

直接说结论:C# 中 DateTime.ToString() 是格式化的唯一核心入口,没有“大全”API,只有“标准格式符”和“自定义格式字符串”两套机制,用错大小写、忽略区域文化、混淆 mm(分钟)和 MM(月份)是 90% 的报错根源。

标准格式符:快速套用但受文化影响

标准格式符是单字母(如 "d""D""s"),对应系统预设的本地化模式。它们省事,但输出不稳定——中文系统下 "d" 输出 2025/12/26,英文系统可能变成 12/26/2025

自定义格式字符串:精准控制但大小写敏感

这是真正可控的方式,靠拼接占位符实现任意格式。关键不是记全所有符号,而是盯住三组易混对:

高频实用组合:

DateTime.Now.ToString("yyyyMMdd_HHmmss")     // 文件名安全:20251226_221345
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") // 带毫秒日志:2025-12-26 22:13:45.123
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ")    // UTC 时间(ISO 8601):2025-12-26T22:13:45Z

区域文化(Culture):不显式指定就默认“当前系统”

分隔符(如 /-)、星期/月份名称、AM/PM 文字,全由当前线程的 CultureInfo 决定。你写 "yyyy/MM/dd",在中文 Windows 上没问题,但在德语系统里可能被替换成 2025.12.26(因为德语用点作日期分隔符)。

容易被忽略的边界点

很多问题不是不会写,而是没意识到这些隐性约束:

真正难的不是记住几十个格式符,而是每次写 ToString 时,心里默念三句:我需要跨文化一致吗?这个 MM 是月份还是分钟?这个分隔符会不会被系统偷偷换掉?