.net 将PowerShell中的日期时间格式化为JSON格式\/日期(1411704000000)\/

qvsjd97n  于 2023-02-26  发布在  .NET
关注(0)|答案(4)|浏览(79)

我想以字符串的形式获取当前日期,格式如下:
\/Date(1411762618805)\/
我一直在与PowerShell斗争,并尝试了以下方法,但它总是用不需要的属性 Package 对象。我只需要value

Get-Date | ConvertTo-Json
# returns
{
  "value":  "\/Date(1411762618805)\/",
  "DisplayHint":  2,
  "DateTime":  "Friday, September 26, 2014 4:16:58 PM"
}

当然,如果您尝试转换回ConvertFrom-Json对象,您将返回一个.NET Date对象。
我已经和

Get-Date | Select-Object -Property Date | ConvertTo-Json
{
  "Date":  "\/Date(1411704000000)\/"
}

但是它仍然被 Package 在一个Date子属性中,最终我想要的只是一个微软丑陋的JSON格式的string
如果可能的话,我只想使用内置的.NET JSON序列化器。

oalqel3c

oalqel3c1#

这里有两个问题属性,DateTime和DisplayHint,需要不同的解决方案。DateTime属性是扩展类型系统附加的ScriptProperty,因此它自动存在于所有DateTime对象上。您可以通过Remove-TypeData从当前会话中的所有DateTime对象中删除它

Get-TypeData System.DateTime | Remove-TypeData

DisplayHint属性是由Get-Date cmdlet添加的NoteProperty。我不知道有什么方法可以从序列化中取消此属性。您可以从DateTime:

Get-Date | foreach { $_.PSObject.Properties.Remove("DisplayHint"); $_ } | ConvertTo-Json

它将输出

"\/Date(1411846057456)\/"

这是当前日期和时间,如果您只需要日期,可以执行此操作

Get-Date | select -ExpandProperty Date | ConvertTo-Json

这里我们不必删除DisplayHint,因为它不是由Get-Date附加的。
甚至不要让我开始在箍你将不得不跳过转换回适当的日期时间对象。

nwlls2ji

nwlls2ji2#

所以,JSON日期的奇妙之处在于...没什么。它们是邪恶的,应该受到惩罚。
那么,什么是JSON日期呢?它是从Unix Epoc(1970年1月1日)以来的毫秒数,也就是UTC时间。所以,这很好,但是我们如何在不使用ConvertTo-JSON cmdlet的情况下获得它呢?我所知道的最简单的方法是:

[int64]([datetime]::UtcNow)-(get-date "1/1/1970").TotalMilliseconds

这将得到JSON格式的当前日期和时间。如果你想要一个特定的日期或日期/时间,你可以这样做,但你必须调整时区,这是我们可以做到的,它只会变长:

$target = "2/2/2014 6:32 PM"
[int64]((get-date $target).addhours((([datetime]::UtcNow)-(get-date)).Hours)-(get-date "1/1/1970")).totalmilliseconds
1391391120000

这将是最后一个Super Bowl的启动时间。

fzwojiic

fzwojiic3#

我知道这是旧的,但谷歌引导我到这里。我使用Invoke-RestMethod发送/接收JSON数据,包括/Date(1411704000000)/格式的时间戳。我设法使用以下代码从PowerShell转换为JSON:

[System.DateTime]$(Get-Date).DateTime

示例:

@{DateTime = [System.DateTime]$(Get-Date).DateTime} | ConvertTo-Json

退货:

{
    "DateTime":  "\/Date(1484023637000)\/"
}
k7fdbhmy

k7fdbhmy4#

请尝试使用[System.Datetime]::Now而不是Get-Date cmdlet

相关问题