Pregunta Formato de una fecha y hora en PowerShell a JSON como \ / Fecha (1411704000000) \ /


Quiero obtener la fecha actual como una cadena en el siguiente formato:

\/Date(1411762618805)\/

He estado luchando con PowerShell y he intentado lo siguiente, pero sigue envolviendo el objeto con propiedades no deseadas. Solo necesito el value

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

Por supuesto, si intenta convertir de nuevo a un objeto con ConvertFrom-Json usted está de vuelta con un objeto de fecha .NET.

Me he acercado con

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

Pero todavía está envuelto en una propiedad hijo Fecha. Al final del día todo lo que quiero es un cuerda con el feo formato JSON de Microsoft.

Solo quiero utilizar los serializadores .NET JSON integrados si es posible.


5
2017-09-26 20:37


origen


Respuestas:


Hay dos propiedades problemáticas aquí, DateTime y DisplayHint, y ambas requieren una solución diferente. La propiedad DateTime es un ScriptProperty adjunto por el sistema de tipo extendido, por lo que existe en todos los objetos DateTime automáticamente. Puede eliminarlo de todos los objetos DateTime en la sesión actual a través de Remove-TypeData

Get-TypeData System.DateTime | Remove-TypeData

La propiedad DisplayHint es una propiedad de nota que se agrega con el cmdlet Get-Date. No conozco ninguna forma de suprimir esto de la serialización. Puedes eliminarlo explícitamente del DateTime:

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

que dará salida

"\/Date(1411846057456)\/"

Esta es la fecha y hora actuales, si solo quieres la fecha puedes hacerlo

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

Aquí no tenemos que quitar el DisplayHint porque no fue adjuntado por Get-Date.

Ni siquiera me haga comenzar con los aros, tendrá que saltar para volver al objeto de fecha y hora adecuado.


5
2017-09-27 19:32



Entonces, lo maravilloso de las fechas de JSON es ... nada. Son malvados, y merecen ser castigados.

Entonces, ¿qué es una fecha JSON? Es el número de milisegundos desde Unix Epoc (1 de enero de 1970), bueno, la hora UTC es. Entonces, eso es genial y todo, pero ¿cómo obtenemos eso sin usar el cmdlet ConvertTo-JSON? La forma más fácil que conozco es esta:

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

Eso te dará la fecha y hora actual formateada para JSON. Si desea una fecha específica o fecha / hora, puede hacerlo, pero debe ajustar la zona horaria, lo que podemos hacer, simplemente se hace larga:

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

Ese sería el tiempo de inicio para el último Super Bowl.


3
2017-09-26 21:34



Sé que esto es viejo pero Google me llevó aquí. Estoy usando Invoke-RestMethod para enviar / recibir datos JSON, incluidas las marcas de tiempo en el formato / Fecha (1411704000000) /. Logré convertir de PowerShell a JSON usando lo siguiente:

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

Ejemplo:

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

Devoluciones:

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

0
2018-01-10 04:52