Каков ваш любимый формат даты и времени в имени файла?

Это несколько субъективный вопрос, и не очень важно в большой схеме вещей, но что-то, что меня раздражает регулярно. Кажется, нет никакого очевидного способа поставить метку времени в имени файла.

Задача состоит в том, что временные метки в именах файлов должны быть сортируемыми. Но .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