DateTime.Now.ToString()
DateTime.Now.ToString() 是 C# 中格式化当前系统时间 / 日期的核心用法,通过传入不同格式字符串,可灵活输出符合业务需求的日期时间格式(如日志命名、报告时间戳、界面显示等)。以下是完整用法拆解,包含基础语法、常用格式、自定义规则和注意事项:
一、核心语法
// 基础形式:无参数(默认格式,受系统区域设置影响)
string defaultTime = DateTime.Now.ToString();
// 核心形式:指定格式字符串(推荐,可控性强)
string customTime = DateTime.Now.ToString("格式字符串");
// 进阶:指定格式 + 区域(避免多语言环境格式错乱)
string enTime = DateTime.Now.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
二、常用预设格式(快速套用)
C# 提供了预设格式符,对应常用的标准化格式,无需手动拼接:
| 格式符 | 含义 | 示例(当前时间:2025-12-18 15:30:45.123) |
|---|---|---|
d |
短日期格式 | 2025/12/18(系统区域为中文) |
D |
长日期格式 | 2025 年 12 月 18 日 星期四 |
t |
短时间格式 | 15:30 |
T |
长时间格式 | 15:30:45 |
f |
完整日期 + 短时间 | 2025 年 12 月 18 日 星期四 15:30 |
F |
完整日期 + 长时间 | 2025 年 12 月 18 日 星期四 15:30:45 |
g |
常规日期 + 短时间 | 2025/12/18 15:30 |
G |
常规日期 + 长时间 | 2025/12/18 15:30:45 |
o |
可排序格式(ISO 8601) | 2025-12-18T15:30:45.1230000+08:00 |
s |
可排序字符串格式 | 2025-12-18T15:30:45 |
u |
UTC 可排序格式 | 2025-12-18 07:30:45Z(UTC 时间) |
示例代码:
// 输出:2025年12月18日 星期四
Console.WriteLine(DateTime.Now.ToString("D"));
// 输出:2025-12-18T15:30:45(日志/数据库常用)
Console.WriteLine(DateTime.Now.ToString("s"));
三、自定义格式(精准控制)
通过自定义格式符拼接,可实现任意格式(机器视觉 / 工业场景高频使用,如文件名、检测报告时间戳):
| 自定义符 | 含义 | 示例 |
|---|---|---|
yyyy |
4 位年份 | 2025 |
MM |
2 位月份(补 0) | 12 |
dd |
2 位日期(补 0) | 18 |
HH |
24 小时制(补 0) | 15 |
hh |
12 小时制(补 0) | 03 |
mm |
分钟(补 0) | 30 |
ss |
秒(补 0) | 45 |
fff |
毫秒(3 位,补 0) | 123 |
tt |
上午 / 下午(中文) | 下午 |
: |
时间分隔符 | : |
/ |
日期分隔符 | / |
高频自定义示例(工业 / 视觉场景):
// 1. 文件名格式(无特殊字符):20251218_153045
string fileNameTime = DateTime.Now.ToString("yyyyMMdd_HHmmss");
// 2. 高精度时间戳(含毫秒):2025-12-18 15:30:45.123
string highPrecision = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
// 3. 12小时制带上午/下午:2025-12-18 03:30:45 下午
string twelveHour = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss tt");
// 4. 仅年月:2025-12
string yearMonth = DateTime.Now.ToString("yyyy-MM");
四、关键注意事项
-
区域适配:
-
直接使用
ToString("yyyy/MM/dd")时,/会被系统区域的日期分隔符替换(如中文是/,英文是-); -
若需固定分隔符(如强制
-),用InvariantCulture:// 强制输出:2025-12-18(不受系统区域影响) string fixedFormat = DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
-
-
大小写敏感:
MM是月份(01-12),mm是分钟;HH是 24 小时制,hh是 12 小时制;yyyy是 4 位年,yy是 2 位年(25)。
-
空格式 / 无参数:
DateTime.Now.ToString()等价于ToString("G")(常规格式),输出如2025/12/18 15:30:45(中文系统);- 不推荐无参数使用,易因系统区域不同导致格式错乱。
-
UTC 时间 :若需世界统一时间(而非本地时间),用
DateTime.UtcNow:// UTC时间:2025-12-18 07:30:45 string utcTime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
五、工业场景实战示例(机器视觉)
// 场景:视觉检测报告命名(含时间戳)
string reportName = $"PMA检测报告_{DateTime.Now.ToString("yyyyMMdd_HHmmss_fff")}.pdf";
// 输出:PMA检测报告_20251218_153045_123.pdf
// 场景:日志记录(精准时间)
string log = $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}] PMA工具XY位置:X=123.45, Y=67.89";
// 输出:[2025-12-18 15:30:45.123] PMA工具XY位置:X=123.45, Y=67.89
visionPro脚本写入CSV方法
cs
using System.Text;
CogToolBlock block1 = (CogToolBlock) mToolBlock.Tools["四合一磁铁"];
CogToolBlock block2 = (CogToolBlock) mToolBlock.Tools["长方形磁铁"];
CogToolBlock block3 = (CogToolBlock) mToolBlock.Tools["细长磁铁"];
double percent1 = (double)block1.Outputs["percent1"].Value,
percent2 = (double) block1.Outputs["percent2"].Value,
percent3 = (double) block1.Outputs["percent3"].Value,
percent4 = (double) block1.Outputs["percent4"].Value,
percent5 = (double) block2.Outputs["percent5"].Value,
percent6 = (double) block3.Outputs["percent6"].Value;
mToolBlock.Outputs["FlowResult"].Value = (bool)block1.Outputs["FlowResult"].Value
&& (bool)block2.Outputs["FlowResult"].Value
&& (bool)block3.Outputs["FlowResult"].Value;
// 调用方法写入数据
WriteCsvNew
(
mToolBlock.Outputs["FlowResult"].Value.ToString() + ","
+ percent1.ToString("f2") + ","
+ percent2.ToString("f2") + ","
+ percent3.ToString("f2") + ","
+ percent4.ToString("f2") + ","
+ percent5.ToString("f2") + ","
+ percent6.ToString("f2") + ","
);
// 写入CSV文件方法
void WriteCsvNew(string result)
{
// 路径
string path = "D:\\CCD数据\\";
// 文件名称
string fileName = path + DateTime.Now.ToString("yyyy-MM-dd-") + "窗口1" + ".csv";
// 此时时间
string Datedate = DateTime.Now.ToString("T");
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
if(!File.Exists(fileName))
{
StreamWriter sw = new StreamWriter(fileName, true, Encoding.UTF8);
// 表头
string str1 =
"时间" + "," +
"总结果" + "," +
"四合一1" + "," +
"四合一2" + "," +
"四合一3" + "," +
"四合一4" + "," +
"长方形" + "," +
"细长1" + "," +
"\t\n";
sw.Write(str1);
sw.Close();
}
StreamWriter sw1 = new StreamWriter(fileName, true, Encoding.UTF8);
// 内容拼接
string str = Datedate + "," + result + "\t\n";
sw1.Write(str);
sw1.Close();
}