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();
  }
    
相关推荐
flysh0511 分钟前
如何利用 C# 内置的 Action 和 Func 委托
开发语言·c#
逑之1 小时前
C语言笔记1:C语言常见概念
c语言·笔记·c#
福大大架构师每日一题3 小时前
2026年1月TIOBE编程语言排行榜,Go语言排名第16,Rust语言排名13。C# 当选 2025 年度编程语言。
golang·rust·c#
wangnaisheng3 小时前
【C#】gRPC的使用,以及与RESTful的区别和联系
c#
JosieBook3 小时前
【开源】基于 C# 和 Halcon 机器视觉开发的车牌识别工具(附带源码)
开发语言·c#
龙潜月七3 小时前
做一个背单词的脚本
数据库·windows·c#·aigc·程序那些事
寻星探路3 小时前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
故事不长丨4 小时前
深度解析C#文件系统I/O操作:File类与FileInfo类的核心用法与场景对比
c#·文件系统·file·fileinfo·i/o操作·i/o流
henreash5 小时前
Language-ext
c#·函数式编程
kylezhao20196 小时前
C#根据时间加密和防止反编译
java·前端·c#