You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#生成时间唯一值时ToString()为何将"00"截断为"0"?

为何DateTime的时分秒转字符串时会把"00"截断成"0"?

原因分析

你的代码里,today.Date.Day、today.Hour、today.Minute、today.Second都是整数类型(int),调用无参数的ToString()方法时,只会输出整数本身的字符串形式,不会自动补前导零。比如当分钟或秒的数值为0时,int类型的0转字符串就是"0",而非你期望的"00"。

唯独月份你用了today.ToString("MM"),这里的"MM"是DateTime专属的格式字符串,作用就是固定输出两位的月份值,所以不会出现截断问题。

解决方案

你可以通过两种方式确保所有日期时间部分都输出两位字符串:

方式1:统一使用DateTime格式字符串

直接利用DateTime的格式化能力,一次性拼接出所需格式:

var today = DateTime.Now;
string key = $"341{today:ddMMHHmmss}";

或者用string.Format的写法:

var today = DateTime.Now;
string key = string.Format("341{0:ddMMHHmmss}", today);

方式2:给整数类型补前导零

对每个整数类型的日期部分,使用ToString("D2")强制输出两位数字(不足两位时补前导零):

var today = DateTime.Now;
string key = string.Format("341{0}{1}{2}{3}{4}", 
    today.Date.Day.ToString("D2"), 
    today.ToString("MM"), 
    today.Hour.ToString("D2"), 
    today.Minute.ToString("D2"), 
    today.Second.ToString("D2"));

内容的提问来源于stack exchange,提问作者Calalee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:11:11