Domanda

Ciao

Ho un database legacy con un campo contenente un numero intero che rappresenta un datetime in UTC

Dalla documentazione: " I timestamp all'interno di un CDR vengono visualizzati in Universal Coordinated Time (UTC). Questo valore rimane indipendentemente dalle modifiche dell'ora legale "

Un esempio di valore è 1236772829.

La mia domanda è qual è il modo migliore per convertirlo in .NET DateTime (nel codice CLR, non nel DB), sia come valore UTC che come valore di ora locale.

Ho provato a cercarlo su Google ma senza fortuna.

Grazie in anticipo / Johan

È stato utile?

Soluzione

Cercare su Google quella frase esatta mi dà questa pagina Cicso , che continua dicendo" Il campo specifica un valore time_t ottenuto dal sistema operativo. & Quot;

time_t è un concetto di libreria C che in senso stretto non deve essere particolare implementazione, ma tipicamente per i sistemi UNIX-y sarà il numero di secondi dall'inizio dell'era Unix, 1970 gennaio 1 00:00.

Supponendo che sia giusto, questo codice ti darà un DateTime da un int:

        DateTime epochStart = new DateTime(1970, 1, 1);

        int cdrTimestamp = 1236772829;

        DateTime result = epochStart.AddSeconds(cdrTimestamp);

        // Now result is 2009 March 11 12:00:29

Dovresti controllare la sanità mentale dei risultati ottenuti per confermare che questa è l'interpretazione corretta di questi time_t s.

Altri suggerimenti

Dovrai sapere cosa significa veramente l'intero. Generalmente consisterà in:

  • Un'epoca / offset (ovvero cosa significa 0), ad esempio "mezzanotte del 1 ° gennaio 1970"
  • Una scala, ad es. secondi, millisecondi, zecche.

Se puoi ottenere due valori e cosa significano in termini di UTC, il resto dovrebbe essere facile. Il modo più semplice sarebbe probabilmente avere un DateTime (o DateTimeOffset ) come epoca, quindi costruire un TimeSpan dall'intero, ad es. TimeSpan.FromMilliseconds ecc. Aggiungi i due insieme e il gioco è fatto. EDIT: utilizzando AddSeconds o AddMilliseconds secondo la risposta di aakashm è un modo più semplice di fare questo bit :)

In alternativa, esegui l'aritmetica e chiama DateTime costruttore che richiede un numero di tick . (Probabilmente anche la versione che prende un DateTimeKind sarebbe migliore, quindi puoi dichiarare esplicitamente che è UTC.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top