Подтвердить что ты не робот

Преобразование DateTime.Now в действительное имя файла Windows

У меня была эта проблема довольно много раз, и я только что использовал обходной путь, но думал, что попрошу здесь, если есть более простой вариант. Когда у меня есть строка из DateTime.Now, и я тогда хочу использовать ее в имени файла, я не могу, потому что Windows не разрешает символы/и: в именах файлов, я должен пойти и заменить их следующим образом:

string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');

Что, кажется, немного хлопот, есть ли более простой способ сделать это? Любые предложения, которые были высоко оценены.

4b9b3361

Ответ 1

 DateTime.Now.ToString("dd_MM_yyyy")

Ответ 2

Как написано Самичем, но

// 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

имеется 19 цифр,

Если вы ненавидите мир еще больше:

DateTime.Now.Ticks.ToString("X16");

В DateTime.MaxValue.Ticks есть 16 шестнадцатеричных цифр.

Ответ 3

Используйте шаблон для стимуляции:

DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10

Ответ 4

Вы можете использовать формат longestamp long:

DateTime.Now.ToBinary()

Ответ 5

Если вам нужно более точное время, вы можете использовать:

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:

  • 2014-11-15T18: 32: 17 + 00: 00
  • 2014-11-15T18: 32: 17 + 08: 00

отформатированные с использованием "s" , идентичны.

Итак, если ваши даты представляют собой временные часовые пояса, я бы рекомендовал использовать "O" или использовать DateTime.UtcNow.