我希望我的字符串YearMonthDayHourMinuteSecondMillisecond具有这种格式(必要时预先添加“0”):
20140227142807
......但是这个:
string YearMonthDayHourMinuteSecond = string.Format("{0}{1}{2}_{3}{4}{5}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
...给我2月份的“2”(而不是“02”)等,例如:
2014227142807
我可以这样解决:
string YearMonthDayHourMinuteSecondMillisecond = string.Format("{0}{1}{2}_{3}{4}{5}{6}", dt.Year, ConditionalZeroForepad(dt.Month), ConditionalZeroForepad(dt.Day), ConditionalZeroForepad(dt.Hour), ConditionalZeroForepad(dt.Minute), ConditionalZeroForepad(dt.Second);
private string ConditionalZeroForepad(string s)
{
if (s.Length < 2)
{
return string.Format("0{1}", s);
}
}
......但这比一袋巴茨还要快9倍。
什么是更优雅的方式来实现这一目标?
答案 0 :(得分:4)
根本不要使用string.Format
- 使用DateTime.ToString()
:
string text = dt.ToString("yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
或者直到秒:
string text = dt.ToString("yyyyMMddHHmmss", CultureInfo.InvariantCulture);
(您的变量名称表示您需要毫秒,但您的样本建议您不要。)
请注意使用CultureInfo.InvariantCulture
确保始终使用公历,即使该帖子的当前文化是具有不同默认日历的文化。 (显然,如果你想要一个不同的日历,这是另一回事。)
有关详细信息,请参阅custom date and time format strings。
答案 1 :(得分:1)
您需要使用以下字符串格式:
var str = string.Format("{0:D2}", 2);
str的值:02
D2
部分告诉格式化程序确保格式化数字中至少有两位数字。 See this MSDN page for more on Custom Numeric Format Strings
但是,为DateTime.ToString
提供日期时间格式是一种更好的解决方案,然后尝试从各个部分组合您想要的格式。
答案 2 :(得分:1)
string YearMonthDayHourMinuteSecondMillisecond = dt.ToString("yyyyMMddHHmmss")
答案 3 :(得分:1)
你可以使用带有格式参数的ToString(),例如dt.Month.ToString(“D2”)