Существует ли стандартное строковое представление DateTime, которое является допустимым как имя файла Windows и может быть проанализировано с помощью DateTime.Parse? - PullRequest
1 голос
/ 06 января 2010

В рамках простого процесса резервного копирования я хотел бы сохранить файлы с именем, указывающим дату и время резервного копирования. Прямо сейчас я использую ггггMMddTHHmmss , то есть "20100601T115720". Я хотел бы иметь возможность проанализировать эти даты назад, чтобы позволить очистить файлы старше определенной даты. (Время создания резервной копии не обязательно совпадает с датой создания файла.) В конечном итоге это выполняется в Powershell с использованием строки, подобной следующей:

Get-ChildItem $backupDirectory -filter *.bak | where { [System.DateTime]::ParseExact([System.IO.Path]::GetFileNameWithoutExtension($_), "yyyyMMddTHHmmss", [System.Globalization.CultureInfo]::InvariantCulture) -lt $oldestDate }

Обратите внимание, что в настоящее время я использую метод DateTime.ParseExact. Это прекрасно работает, и поэтому я думаю, что мой вопрос носит более академический характер, но мне интересно, есть ли «стандартный» формат имени файла Windows, который:

  • Включает информацию о дате и времени И
  • Может быть проанализирован с использованием стандартного DateTime.Parse

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Это не «стандартный» формат имени файла.

Я обычно использую yyyy-MM-dd, HH-mm-ss, что намного удобнее для чтения, чем набор чисел.

1 голос
/ 07 января 2010

Я также не нашел стандартного формата имени файла, но этот трюк хорошо работает для того, чтобы сделать вывод PowerShell локализованным для чтения датой / временем (т.е. 2 февраля 2010 г. 8:15:14 AM):

(Get-Date | Out-String).Trim().Replace(":", "-")

При конвейерной передаче Get-Date к Out-String используется форматер по умолчанию (в данном случае время в текущей локали), чтобы сделать дату читаемой строкой. Trim () удаляет лишние переводы строк с обоих концов. Так как единственный недопустимый символ во временных строках локалей, о которых я знаю, это ':', я просто заменяю ':' на '-'

Это определенно медленнее, чем использование форматирования строк .NET. Если вы хотите использовать тот же трюк без использования командлетов, вы можете написать его так:

$date = [DateTime]::Now
($date.ToLongDateString() + " " + $date.ToLongTimeString()).Replace(":",'-')

Надеюсь, это поможет

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