DateTime 时间格式化字符串参考文档
本文档适用于 PCHMI 内部时间格式化、C# DateTime.ToString(),分为标准格式字符串与自定义格式字符串。
注意:显示结果受系统区域文化影响;PCHMI内部优先使用自定义格式保证跨电脑输出格式统一。
1、标准时间格式字符串
标准格式(单字母),输出结果依赖操作系统的区域语言设置,不同电脑格式会发生变化,生产项目不推荐。
| 格式符 |
说明 |
示例输出(中文环境) |
| d |
短日期 |
2026/8/31 |
| D |
长日期 |
2026年8月31日 |
| t |
短时间 |
14:30 |
| T |
长时间 |
14:30:25 |
| f |
完整日期+短时间 |
2026年8月31日 14:30 |
| F |
完整日期+长时间 |
2026年8月31日 14:30:25 |
| g |
常规(短日期+短时间) |
2026/8/31 14:30 |
| G |
常规(短日期+长时间) |
2026/8/31 14:30:25 |
| s |
可排序ISO格式(固定不变) |
2026‑08‑31T14:30:25 |
| u |
通用可排序UTC格式 |
2026‑08‑31 14:30:25Z |
2、自定义格式化占位符(重点,PCHMI项目推荐)
使用组合占位符,格式完全固定,不受系统区域影响,上位机日志、报表、MES对接优先使用。
| 占位符 |
说明 |
示例 |
| yyyy |
4位年份 |
2026 |
| yy |
2位年份 |
26 |
| MM |
2位月份(01‑12) |
08 |
| M |
月份(1‑12,不补零) |
8 |
| dd |
2位日期(01‑31) |
31 |
| d |
日期(1‑31,不补零) |
5 |
| HH |
24小时制小时 00‑23 |
14 |
| H |
24小时制小时不补零 0‑23 |
8 |
| hh |
12小时制小时 01‑12 |
02 |
| mm |
分钟 00‑59 |
05 |
| ss |
秒 00‑59 |
09 |
| fff |
毫秒 3位 |
123 |
| ff |
毫秒2位 |
12 |
| f |
毫秒1位 |
1 |
| tt |
AM/PM 上午/下午标记 |
下午 |
3、C# 代码示例
DateTime now = DateTime.Now;
//示例1:标准年月日时分秒 2026‑08‑31 14:30:25
string s1 = now.ToString("yyyy-MM-dd HH:mm:ss");
//示例2:带毫秒,日志常用 2026‑08‑31 14:30:25.123
string s2 = now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//示例3:中文格式 2026年08月31日 14时30分25秒
string s3 = now.ToString("yyyy年MM月dd日 HH时mm分ss秒");
//示例4:仅日期 2026‑08‑31
string s4 = now.ToString("yyyy-MM-dd");
//示例5:仅时间 14:30:25
string s5 = now.ToString("HH:mm:ss");
//示例6:文件名安全格式(不能含冒号、斜杠)20260831_143025
string s6 = now.ToString("yyyyMMdd_HHmmss");
//示例7:ISO可排序格式
string s7 = now.ToString("s");
4、PCHMI场景常用模板
适用于:报警记录、操作日志、报表导出、MES上传、文件命名、PLC时间字符串写入。
| 用途场景 |
格式化字符串 |
输出样例 |
| 数据库/日志标准时间 |
yyyy-MM-dd HH:mm:ss |
2026‑08‑31 15:22:10 |
| 日志带毫秒 |
yyyy-MM-dd HH:mm:ss.fff |
2026‑08‑31 15:22:10.345 |
| 文件名称(安全无特殊符号) |
yyyyMMdd_HHmmss |
20260831_152210 |
| 中文显示界面 |
yyyy年MM月dd日 HH:mm:ss |
2026年08月31日 15:22:10 |
| 仅日期 |
yyyy‑MM‑dd |
2026‑08‑31 |
| 仅时分秒 |
HH:mm:ss |
15:22:10 |
5、PCHMI全局UINT64时间转换说明
PCHMI.GLOBAL.UInt64DateTimeNow 返回UINT64时间戳,需要转为DateTime对象再格式化。
//PCHMI UINT64时间转DateTime并格式化
ulong timeU64 = PCHMI.GLOBAL.UInt64DateTimeNow;
DateTime dt = DateTime.FromBinary((long)timeU64);
string timeStr = dt.ToString("yyyy-MM-dd HH:mm:ss");
6、常见踩坑注意事项
- HH vs hh:HH=24小时制;hh=12小时制,上位机项目绝大多数用HH。
- MM vs mm:MM大写=月份;mm小写=分钟,极易写反出错。
- 文件名不能使用
/ \ : * ? " < > |,时间输出文件名禁止直接用 yyyy‑MM‑dd HH:mm:ss,改用 yyyyMMdd_HHmmss。
- 标准单字母格式 d/D/t/T/g/G 受系统区域影响,不同电脑输出不一样,报表、MES上传禁止使用。
- MM、dd、HH、mm、ss 会自动补零;M、d、H不补零,数据库存储建议全部使用补零格式。