Ответ 1
DateTime.Now.ToString("dd_MM_yyyy")
У меня была эта проблема довольно много раз, и я только что использовал обходной путь, но думал, что попрошу здесь, если есть более простой вариант. Когда у меня есть строка из DateTime.Now
, и я тогда хочу использовать ее в имени файла, я не могу, потому что Windows не разрешает символы/и: в именах файлов, я должен пойти и заменить их следующим образом:
string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
Что, кажется, немного хлопот, есть ли более простой способ сделать это? Любые предложения, которые были высоко оценены.
DateTime.Now.ToString("dd_MM_yyyy")
Как написано Самичем, но
// The following will produce 2011-10-24-13-10
DateTime.Now.ToString("yyyy-MM-dd-HH-mm", CultureInfo.InvariantCulture);
Если вы мне не доверяете, попробуйте настроить культуру на new CultureInfo("ar-sa");
: -)
Я добавлю, что если вы ненавидите мир, это самая точная вещь:
DateTime.Now.Ticks.ToString("D19");
В DateTime.MaxValue.Ticks
Если вы ненавидите мир еще больше:
DateTime.Now.Ticks.ToString("X16");
В DateTime.MaxValue.Ticks
есть 16 шестнадцатеричных цифр.
Используйте шаблон для стимуляции:
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
Вы можете использовать формат longestamp long:
DateTime.Now.ToBinary()
Если вам нужно более точное время, вы можете использовать:
DateTime.Now.ToString("O").Replace(":", "_") //2016-09-21T13_14_01.3624587+02_00
или (если вам нужно немного меньше)
DateTime.Now.ToString("s").Replace(":", "_") //2016-09-21T13_16_11
Оба являются допустимыми именами файлов и сортируются.
Вы можете создать метод расширения:
public static string ToFileName(this DateTime @this)
{
return @this.ToString("O").Replace(":", "_");
}
И затем используйте его следующим образом:
var saveZipToFile = "output_" + DateTime.Now.ToFileName() + ".zip";
Формат "s" не учитывает часовые пояса и, следовательно, datetimes:
отформатированные с использованием "s" , идентичны.
Итак, если ваши даты представляют собой временные часовые пояса, я бы рекомендовал использовать "O" или использовать DateTime.UtcNow
.