我希望以下列格式将当前日期作为字符串获取:
\/Date(1411762618805)\/
我一直在与PowerShell斗争,并尝试了以下方法,但它不断地用不需要的属性包装对象。我只需要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)\/"
}
但它仍然包含在Date子属性中。在一天结束时,我想要的是一个带有微软丑陋JSON格式的字符串。
我只想尽可能使用内置的.NET JSON序列化程序。
答案 0 :(得分:6)
所以,关于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的启动时间。
答案 1 :(得分:6)
这里有两个问题属性,DateTime和DisplayHint,两者都需要不同的解决方案。 DateTime属性是由扩展类型系统附加的ScriptProperty,因此它自动存在于所有DateTime对象上。您可以通过Remove-TypeData
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附加。
甚至不让我开始你必须跳过的篮球转换回正确的日期时间对象。
答案 2 :(得分:0)
我知道这已经过时了但谷歌却把我带到了这里。我正在使用Invoke-RestMethod发送/接收JSON数据,包括/ Date(1411704000000)/格式的时间戳。我设法使用以下内容从PowerShell转换为JSON:
[System.DateTime]$(Get-Date).DateTime
示例:
@{DateTime = [System.DateTime]$(Get-Date).DateTime} | ConvertTo-Json
返回:
{
"DateTime": "\/Date(1484023637000)\/"
}