Конвертировать DateTime.Now в действительное имя файла Windows - PullRequest
39 голосов
/ 24 октября 2011

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

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

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

Ответы [ 5 ]

56 голосов
/ 24 октября 2011
 DateTime.Now.ToString("dd_MM_yyyy")
47 голосов
/ 24 октября 2011

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

// 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 шестнадцатеричных цифр.
10 голосов
/ 24 октября 2011

Использовать шаблон ToString:

DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
2 голосов
/ 21 сентября 2016

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

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" не учитывает часовые пояса и, следовательно, дату и время:

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

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

Поэтому, если ваши даты и время представляют разные часовые пояса, я бы рекомендовал использовать «O» или DateTime.UtcNow.

2 голосов
/ 24 октября 2011

Вы можете использовать длинный формат метки времени:

DateTime.Now.ToBinary()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...