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
相关产品推荐
相关产品推荐

