Каков ваш любимый формат даты и времени в имени файла?
Это несколько субъективный вопрос, и не очень важно в большой схеме вещей, но что-то, что меня раздражает регулярно. Кажется, нет никакого очевидного способа поставить метку времени в имени файла.
Задача состоит в том, что временные метки в именах файлов должны быть сортируемыми. Но .NET отсортированные форматы даты, такие как "s" ("yyyy-MM-ddTHH:mm:ss"
) и "u" ("yyyy-MM-dd HH:mm:ssZ"
) недействительны в именах файлов из-за символов ":".
Другое дело, что вы должны легко увидеть, используется ли универсальное или локальное время.
Практически пользователи, похоже, предпочитают местное время для всеобщего времени.
В основном я использовал ISO 8601 с базовым форматом времени:
- Строка локального формата времени
"yyyy-MM-ddTHHmmsszz"
- строка формата UTC
"yyyy-MM-ddTHHmmssZ"
В этих форматах мое текущее местное время будет "2009-08-08T151800+03"
и UTC "2009-08-08T121800Z"
Вы также можете автоопределить DateTime.Kind с помощью "K" и использовать "yyyy-MM-ddTHHmmssK"
, но тогда вам придется заменить ': '.
Любые другие предложения?
Изменить: Несколько примечаний:
местное время + формат часового пояса "yyyy-MM-ddTHHmmsszz"
больше не сортируется, если задействованы несколько часовых поясов. В большинстве случаев имеет смысл отбрасывать информацию о часовом поясе, если она избыточна, и использовать UTC в противном случае.
Другое дело, что UTC всегда должен быть отмечен "Z", "GMT" или "UTC", чтобы предотвратить догадки и ошибки.
Юлианские даты и другие stardates - это круто, потому что дата арифметика с gregorian calendar является braindead.
Ответы
Ответ 1
Я использую это:
My-File--2009-12-31--23-59-59.txt
- Без пробелов
- Двойные тире, чтобы отделить куски, чтобы каждая деталь была легко видна.
- Только один символ пунктуации (тире) позволяет легко печатать
- Нет часовой зоны, потому что для меня я всегда работаю в своем местном часовом поясе; если бы я был нужен, я бы пошел с UTC и добавлю "
--UTC
" после времени.
Ответ 2
Я бы использовал YYYY-MM-DD HHmmss
для имен файлов, если не существует особой необходимости в часовых поясах или возможной необходимости анализировать их в даты ISO; в этих случаях, вероятно, предпочтительнее будет дата ISO.
Изменить: Часовые пояса никогда не должны требоваться; сохраняя все в UTC и позволяя людям знать, что все UTC более эффективно, чем указание часового пояса всего.
Ответ 3
Вот что я использую:
private static string CreateMeaningfulFileName(string friendlyName, DateTime date)
{
StringBuilder sb = new StringBuilder();
foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces
{
sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment
}
sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date
return sb.ToString();
}
Требуется дата и описание. Позвольте использовать "Мне нравится DOGS". Результаты в:
ILikeDogs_1999-09-23_18-42
Ответ 4
Есть ли требование, чтобы метка времени была удобочитаемой человеком? Если нет, вы можете просто использовать DateTime.Ticks.ToString(). Очень точные, сортируемые и специальные символы.
Ответ 5
Я использую timestamps unix, например. сколько секунд прошло с эпохи. Часовой пояс: UTC
Но предположим, что вы можете префикс w/timezone, если хотите.
Ответ 6
Обычно я использую yyyymmdd. Если требуется дополнительная точность, она изменяется на yyyymmddhhmsms