Формат DateTime.ToString (), который можно использовать в имени файла или расширении?

102

Я хочу добавить метку времени к именам файлов по мере создания файлов, но большинство методов DateTime, которые я пробовал, выводить что-то с пробелами и косыми чертами. Например:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806

ToFileTime()работает, но не совсем читабельно. Как я могу отформатировать вывод в удобочитаемую метку времени с датой и временем, которые можно использовать в имени файла или расширении? Желательно что-то вроде 2011-19-9--13-45-30?

pdizz
источник
2
Как насчет этого ... DateTime.Now.ToString ("yyyy-MM-dd - hh-mm-ss")
Gene S

Ответы:

180

Вы можете использовать это:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Кристоф Клаас
источник
5
Вы можете посмотреть больше примеров / вариантов здесь: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Кристоф Клаас
1
Думаю, с учетом времени utc было бы лучше
RealSteel
93
Вы серьезно предлагаете иметь день между годом и месяцем ??
kjbartel
11
Еще более непростительно в имени файла, поскольку список файлов не может быть отсортирован по имени, чтобы получить их в порядке даты и времени. Порядок дня должен быть от наиболее значимого до наименее значимого.
Бернхард Хофманн
4
@Matt - вы предполагаете, что имя файла связано с датой создания / изменения / доступа, что не всегда.
Бернхард Хофманн
122

Я бы использовал формат ISO 8601 без разделителей:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Кристоффер Летте
источник
7
Если вы используете DateTime.Now.ToString("o"), он выдаст вам yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(где окончательное смещение часов и минут +/- GMT). Конечно, это не сработает в качестве формата имени файла, но о "o"форматировании полезно знать.
krillgar
17

У меня аналогичная ситуация, но мне нужен последовательный способ использования DateTime.Parse из имени файла, поэтому я выбрал

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35

Когда я хочу выполнить синтаксический анализ, я могу просто отменить вызов Replace. Таким образом, мне не нужно вводить какие-либо данные в формате yymmdd или угадывать, какие форматы позволяет DateTime.Parse.

Гейб Хаак
источник
9

Ниже приведен список наиболее часто используемых спецификаторов формата времени.,

dd - день месяца, с 01 по 31.

ММ - месяц , с 01 по 12.

гггг - год в виде четырехзначного числа.

чч - час в 12-часовом формате с 01 до 12.

мм - минуты , от 00 до 59.

сс - второй , с 00 по 59.

ЧЧ - час в 24-часовом формате с 00 до 23.

tt -обозначение AM / PM .

Используя вышеуказанное, вы сможете сформировать уникальное имя для вашего имени файла.

Здесь я привел пример

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";

ИЛИ

Если вы не предпочитаете использовать символы, вы также можете попробовать это.,

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";

Надеюсь, это поможет кому-то сейчас или в будущем. :)

РаджешКдев
источник
7

Лично мне это нравится:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")

Потому что он различает дату и время.

Чарльз Клейтон
источник
2
Я полагаю, вы имеете в виду «гггг-ММ-дд ЧЧ.мм.сс»
Филиминджи
Хотя это действительно так, наличие пробелов в именах файлов / путях, как правило, не лучший вариант, так как это может вызвать проблемы в программном обеспечении, которое не учитывает это, и пути в командной строке, не содержащие кавычек. Лучше использовать знак подчеркивания или два тире.
Ной Хибер,
4

Вы можете попробовать

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
Агилас Якоуб
источник
2

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

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
Рухолла Гасампур
источник