【问题标题】:powershell json DateFormatpowershell json日期格式
【发布时间】:2017-10-19 04:11:39
【问题描述】:

从 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 Shell 错误还是 JSON 处理数据格式的方式

日期显示为
月/日/年 HH:MM:SS

see the picture

【问题讨论】:

  • 对我来说看起来像是完全有效的 ISO-8601。 JSON 没有任何描述日期和时间的本机方式。处理此问题的主要方法是包含您所看到的日期的序列化描述的字符串,或者是一个数字,通常是 Unix 时间(即自 1970-01-01 以来的 UTC 秒数)。在可读性、精度和灵活性方面,字符串版本通常是明显的赢家。
  • 如果您需要更改此格式,您将在收到数据后进行。这是服务器发送的格式。

标签: json api powershell date intune


【解决方案1】:

日期只是一个包含日期为 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

【讨论】:

  • 我查看了有关 ISO-8610 的 wiki,
【解决方案2】:

我做了一个 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 

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2018-05-13
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多