Какой менее хитрый способ условно добавить "0" к элементам dateTime?
Я хочу, чтобы моя строка 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" (вместо "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 раз страшнее, чем сумка окурков.
Каков более благородный способ сделать это?
4 ответа
Не использовать string.Format
вообще - пользуйся DateTime.ToString()
:
string text = dt.ToString("yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
Или просто перейти к секундам:
string text = dt.ToString("yyyyMMddHHmmss", CultureInfo.InvariantCulture);
(Ваше имя переменной предполагает, что вам нужны миллисекунды, но ваш пример показывает, что вам не нужно.)
Обратите внимание на использование CultureInfo.InvariantCulture
чтобы вы всегда использовали григорианский календарь, даже если текущая культура потока имеет другой календарь по умолчанию. (Очевидно, если вы хотите другой календарь, это другое дело.)
См. Пользовательские строки формата даты и времени для получения дополнительной информации.
Вы можете использовать ToString() с параметром формата, таким как dt.Month.ToString("D2")
string YearMonthDayHourMinuteSecondMillisecond = dt.ToString("yyyyMMddHHmmss")
Вам нужно использовать формат строки, например:
var str = string.Format("{0:D2}", 2);
Значение ул: 02
D2
часть указывает форматировщику, чтобы в отформатированном номере было как минимум две цифры. См. Эту страницу MSDN для получения дополнительной информации о пользовательских строках числового формата
Но предоставляя формат даты и времени DateTime.ToString
это лучшее решение, чем пытаться составить нужный формат из отдельных частей.