Sto cercando di ottenere il GMT in tempo UNIX. Io uso il seguente codice:Conversioni di tempo Unix in C#
public static long GetGMTInMS()
{
var unixTime = DateTime.Now.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)unixTime.TotalMilliseconds;
}
Per poi convertire il tempo unix indietro a un oggetto DatTime, io uso questo:
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
quando l'eseguo, il GetGMTInMS()
1320249196267
. Quando lo passo a UnixTimeStampToDateTime()
ottengo {11/2/2011 11:53:16 AM}
Che va bene. Questa è l'ora corretta quando ho eseguito il mio codice. Il problema che ho è quando provo a inserire 1320249196267
in un convertitore di tempo unix, come ad esempio this, restituisce il tempo completamente sbagliato.
L'altro problema è che sono nel fuso orario orientale. Questo ha restituito il tempo nel mio fuso orario. È qualcosa che l'oggetto DateTime
gestisce o non ricevo il GMT.
Il tipo restituito deve essere "ulong" anziché lungo, poiché i timestamp UNIX non possono essere negativi? –
@ErikSchierboom: Beh, dipende da: ci sono molti scenari in cui "secondi dall'epoca di Unix" o "millisecondi dall'epoca di Unix" vengono usati dove * possono * essere negativi. Dato che i secondi "long.MaxValue" sono sempre così lontani, penso che sia più sensato essere flessibili e accettare valori negativi per tempi precedenti al 1970. –
Ok, ho capito! Grazie per la spiegazione. –