Это несколько субъективный вопрос, не очень важный по большому счету, но то, что меня постоянно раздражает. Кажется, нет очевидного способа поставить отметку времени в имени файла .
Объективная проблема заключается в том, что отметки времени в именах файлов должны быть отсортированными . Но форматы сортируемых дат .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», чтобы избежать догадок и ошибок.
Юлианские даты и другие звездные даты - это круто, потому что арифметика дат с грегорианским календарем бессмысленна.
Ответы:
Я использую это:
My-File--2009-12-31--23-59-59.txt
--UTC
" после времени.источник
_
) вместо двойного тире для разделения частей. (egMy-File_2009-12-31_23-59-59.txt
)name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.ext
подходит для оболочки Linux. Без часового пояса, но с точностью до наносекунд.Я бы использовал
YYYY-MM-DD HHmmss
для имен файлов, если нет особой потребности в часовых поясах или возможной необходимости синтаксического анализа их в датах ISO; в таких случаях, вероятно, будет предпочтительнее указать дату ISO.Изменить: часовые пояса никогда не должны требоваться; сохранять все в формате UTC и давать людям знать, что это все в формате UTC, более эффективно, чем указывать часовой пояс всего.
источник
T
, но это менее естественно, когда вы его читаете.Вот что я использую:
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(); }
Требуется дата и описание. Давайте использовать «Я люблю СОБАК». Результаты в:
ILikeDogs_1999-09-23_18-42
источник
Есть ли требование, чтобы метка времени была удобочитаемой? Если нет, вы можете просто использовать DateTime.Ticks.ToString () . Очень точный, сортируемый и без специальных символов.
источник
Обычно я использую ггггммдд. Если требуется дополнительная точность, он меняется на ггггммддччммсс
источник
Я использую временные метки unix, например. сколько секунд прошло с эпохи. Время в формате UTC. Но угадайте, что вы можете префикс с данными о часовом поясе, если хотите.
источник