C#6——DateTime

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");

四、关键注意事项

  1. 区域适配

    • 直接使用 ToString("yyyy/MM/dd") 时,/ 会被系统区域的日期分隔符替换(如中文是 /,英文是 -);

    • 若需固定分隔符(如强制 -),用 InvariantCulture

      复制代码
      // 强制输出:2025-12-18(不受系统区域影响)
      string fixedFormat = DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
  2. 大小写敏感

    • MM 是月份(01-12),mm 是分钟;
    • HH 是 24 小时制,hh 是 12 小时制;
    • yyyy 是 4 位年,yy 是 2 位年(25)。
  3. 空格式 / 无参数

    • DateTime.Now.ToString() 等价于 ToString("G")(常规格式),输出如 2025/12/18 15:30:45(中文系统);
    • 不推荐无参数使用,易因系统区域不同导致格式错乱。
  4. 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();
  }
    
相关推荐
Lv11770082 小时前
Visual Studio中的多态
ide·笔记·c#·visual studio
wuguan_3 小时前
C#:多态函数重载、态符号重载、抽象、虚方法
开发语言·c#
我不是程序猿儿3 小时前
【C#】ScottPlot的Refresh()
开发语言·c#
工程师0074 小时前
C# 基于 HSL 与基恩士 PLC 通信
c#·mc协议·基恩士plc
张人玉7 小时前
c# DataSet 类
数据库·c#·dataset
秦苒&7 小时前
【C语言】详解数据类型和变量(一):数据类型介绍、 signed和unsigned、数据类型的取值范围、变量、强制类型转换
c语言·开发语言·c++·c#
c#上位机7 小时前
C#异步编程之async、await
开发语言·c#
郑州光合科技余经理7 小时前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
用户298698530148 小时前
如何在 C# .NET 中将 Markdown 转换为 PDF 和 Excel:完整指南
后端·c#·markdown