Формат даты PowerShell JSON

возвращенные данные из rest-API в виде JSON, где данные/время отформатированы как

{
  "userKey":  ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤,
  "userId":  "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤",
  "userEmail":  "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤",
  "userPrincipalName":  "¤¤¤¤¤¤¤¤¤¤¤¤¤¤",
  "displayName":  "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤",
  "intuneLicensed":  true,
  "isDeleted":  true,
  "startDateInclusiveUTC":  "2017-10-16T00:00:00Z",
  "endDateExclusiveUTC":  "9999-12-31T00:00:00Z",
  "isCurrent":  true,
  "rowLastModifiedDateTimeUTC":  "2017-10-17T00:24:11.8233333Z",
  "PictureUrl":  "¤¤¤¤¤¤¤¤¤¤¤¤.dk"
}

дата/время имеют неправильный формат, данные взяты из Intune DataWareHouse API

данные запрашиваются через PowerShell, мой вопрос, это ошибка оболочки PowerShell или это то, как JSON обрабатывает форматы данных

Дата должна отображаться в виде
ММ/ДД/ГГ ЧЧ:ММ:СС

см. рисунок


person Community    schedule 18.10.2017    source источник
comment
Для меня это выглядит как вполне допустимый ISO-8601. JSON не имеет собственного способа описания даты и времени. Преобладающие способы обработки — это либо строка, содержащая сериализованное описание даты, как вы видите, либо число, которое обычно указывается в Unix-времени (т. е. в секундах UTC с 1970-01-01). С точки зрения удобочитаемости, точности и гибкости строковая версия обычно является явным победителем.   -  person Joey    schedule 18.10.2017
comment
Если вам нужно изменить этот формат, вы должны сделать это после получения данных. Это формат, в котором сервер отправляет.   -  person jradich1234    schedule 18.10.2017


Ответы (2)


Дата — это просто строка, содержащая дату в формате ISO-8601 (поскольку JSON не имеет типа DateTime). Разберите дату, а затем отформатируйте ее как другую строку:

PS> [datetime]::parse("9999-12-31T00:00:00Z").Tostring('MM/dd/yy HH:mm:ss')
12-31-99 01:00:00
person Joey    schedule 18.10.2017
comment
я посмотрел на вики про ISO-8610, - person ; 18.10.2017

я сделал Convertfrom-json, а затем просмотрел каждое свойство Note, если есть лучший подход, не стесняйтесь комментировать :)

$IntuneCollectionData | get-member -type NoteProperty | foreach-object {
    if ($_.value -match "(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+)|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d)|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d)")
    {

        $NewDateTime = [datetime]::parse("$($_.value)").Tostring('MM/dd/yy HH:mm:ss')

        $_.value = $NewDateTime 

    }

}
person Community    schedule 18.10.2017