Гид по технологиям

PowerShell — преобразование строки в дату

4 min read PowerShell Обновлено 12 Dec 2025
PowerShell — преобразование строки в дату
PowerShell — преобразование строки в дату

Зачем преобразовывать строку в дату

Строковые представления дат удобны для хранения и отображения, но мешают вычислениям. Преобразование в объект System.DateTime позволяет выполнять сравнения, арифметику (сложение/вычитание интервалов), фильтрацию по диапазонам и форматирование для вывода или логики.

Краткое определение: DateTime — встроенный тип .NET для представления момента во времени с точностью до 100 наносекунд и возможностью работы с часовыми поясами через DateTimeOffset.

Основные методы преобразования строки в дату

Ниже приведены пять стандартных приёмов с примерами и пояснениями. Во всех примерах замените “02/03/2023” на вашу входную строку.

1. [DateTime]::Parse

  1. Откройте PowerShell от администратора.
  2. Выполните:
$dateString = "02/03/2023"
$parsedDate = [DateTime]::Parse($dateString)
Write-Output $parsedDate

Важно: Parse учитывает текущую культуру (CultureInfo) с форматами дат по умолчанию. В английской (США) культуре строка “02/03/2023” интерпретируется как MM/dd/yyyy (3 февраля 2023). В русской — как dd.MM.yyyy. Если формат входа однозначен для вашей локали, Parse удобен, но он бросит исключение при неверном формате.

Скриншот окна PowerShell с командой Parse

2. [DateTime]::ParseExact

Когда формат строгий и известен, используйте ParseExact.

$dateString = "02/03/2023"
$format = "MM/dd/yyyy"
$parsedDate = [DateTime]::ParseExact($dateString, $format, $null)
Write-Output $parsedDate

ParseExact ожидает точное совпадение формата. Это снижает риск неоднозначного разбора. При несоответствии будет выброшено исключение.

Скриншот PowerShell с ParseExact

3. Get-Date

Get-Date умеет парсить многие строковые представления дат и возвращает объект DateTime.

$dateString = "02/03/2023"
$parsedDate = Get-Date $dateString
Write-Output $parsedDate

Get-Date полезен для быстрой конверсии и имеет дополнительные параметры для вывода и форматирования. Однако поведение зависит от реализации парсинга и культуры.

Скриншот PowerShell с Get-Date

4. Явное приведение ([DateTime]$string) — ускоритель

Приведение через тип часто работает как краткий синтаксис для Parse:

$dateString = "02/03/2023"
$parsedDate = [DateTime]$dateString
Write-Output $parsedDate

Это удобно в однословных выражениях, но имеет те же ограничения, что и Parse — зависит от культуры и бросает исключение при несоответствии.

Иллюстрация приведения строки к DateTime

5. TryParse и TryParseExact — безопасный вариант

Для обработки непредсказуемых входных данных используйте TryParse/TryParseExact. Они возвращают булево значение и не бросают исключение.

$dateString = "02/03/2023"
[DateTime] $out = $null
if ([DateTime]::TryParseExact($dateString, "MM/dd/yyyy", $null, [System.Globalization.DateTimeStyles]::None, [ref]$out)) {
    Write-Output "Успех: $out"
} else {
    Write-Output "Не удалось распарсить"
}

TryParse полезен в скриптах, где вход может быть произвольным (лог-файлы, пользовательский ввод, CSV).

Иллюстрация TryParse в PowerShell

Примеры форматов и локали

  • Формат ISO (рекомендуемый для обмена): “yyyy-MM-dd” — однозначен и не зависит от культуры.
  • Русский формат часто выглядит как “dd.MM.yyyy”.
  • При обработке логов из разных систем отдавайте предпочтение ParseExact с явным форматом или преобразуйте вход к ISO перед парсингом.

Совет: записывайте даты в базе/файлах в ISO-формате (yyyy-MM-ddTHH:mm:ssZ) — это упрощает портирование и сравнения.

Ошибки и когда методы не работают

Important: Parse и приведение бросают исключение на неверный формат. ParseExact и TryParseExact требуют точного формата. Get-Date может вести себя непредсказуемо для редких форматов. Всегда валидируйте вход.

Типичные причины ошибок:

  • Неверный разделитель (“/“ vs “.”).
  • Неполная дата (только год и месяц без дня).
  • Многоязычные названия месяцев (“Mar” vs “март”).

Альтернативные подходы

  • Предобработка: заменить разделители или привести слова месяцев к английским/локальной форме перед парсингом.
  • Использовать DateTimeOffset, если важен часовой пояс.
  • Для больших объёмов данных — парсить в параллели (ForEach-Object -Parallel в PowerShell 7) с TryParse.

Чек-лист для разработчика и администратора

  • Разработчик: используйте ParseExact/TryParseExact для предсказуемости.
  • Оператор/администратор: логируйте исходную строку при ошибке парсинга.
  • Аналитик: храните даты в ISO и конвертируйте при экспорте.

Критерии приёмки

  • Скрипт успешно конвертирует все допустимые входы в тестовом наборе.
  • Неверные строки не приводят к падению скрипта (используется TryParse/TryParseExact или обработка исключений).
  • Вывод — объект DateTime или DateTimeOffset в зависимости от требований.

Небольшой набор тестов приёмки

  1. Вход “2023-02-03” с форматом yyyy-MM-dd — ожидаемый успешный парсинг.
  2. Вход “03.02.2023” с ParseExact(“dd.MM.yyyy”) — успешный.
  3. Вход “32/01/2023” — ожидаемый неуспех, проверка логирования.

Краткий глоссарий

  • DateTime: объект .NET для даты и времени.
  • Parse: метод, который пытается разобрать строку по текущей культуре.
  • ParseExact: метод, требующий точного формата.
  • TryParse: безопасный метод, не выбрасывающий исключений.

Резюме

Преобразование строк в DateTime в PowerShell — базовая и часто необходимая операция. Для строгих форматов используйте ParseExact или TryParseExact. Для пользовательских входов применяйте TryParse, чтобы избежать аварийных завершений. Рекомендуется хранить даты в ISO-формате и логировать неудачные парсинги.

Примечание: если появились вопросы или примеры входных строк, добавьте их в комментарии — помогу подобрать оптимальный подход.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Отключение BitLocker в Windows 10 — полное руководство
Windows

Отключение BitLocker в Windows 10 — полное руководство

Как защитить Windows от программ‑вымогателей
Кибербезопасность

Как защитить Windows от программ‑вымогателей

Как начать отладку ядра Windows
Windows

Как начать отладку ядра Windows

Новая строка поиска Outlook — руководство
Продуктивность

Новая строка поиска Outlook — руководство

Управление Android с ПК через AirDroid
Mobile

Управление Android с ПК через AirDroid

Microsoft Dev Home — настройка среды разработки
Разработка

Microsoft Dev Home — настройка среды разработки