PCHMI 技术文档

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、常见踩坑注意事项