Come convertire i dati nei valori di temporizzazione basati su UTC per confrontare i timings- c #

StackOverflow https://stackoverflow.com//questions/9715066

Domanda

Ho una stringa (variabile è fileDate) con valori di data nel seguente formato:

.

2/12/2011 11:58 AM

Ora voglio convertire questo in una data e poi a UTC Time basato come ho problemi nel confrontare le date in diverse macchine, quindi * Voglio sempre convertire tutte le stringhe (che vengono confrontate) ai valori UTC_Date. *

Ho provato questo codice qui sotto, ma non funzionava come non sono in grado di convertire la stringa sopra in base a DateTime basata (in quanto non ha secondi).

DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");
.

sopra non ha funzionato mostrando Formatexception. Puoi aiutare?

È stato utile?

Soluzione

Per iniziare, suggerirei di usare DateTime.ParseExact o TryParseExact: non mi è chiaro se il tuo campione è destinato a essere il 2 dicembre o il 12 febbraio. Specifica del formato potrebbe rimuovere il FormatException.

Il problema successivo sta funzionando a quale fuso orario si desidera convertirlo - stai dicendo che 11:58 è un locale tempo in un certo fuso orario o già Un tempo UTC?

Inoltre, se è un'ora locale dovrai considerare due casi d'angolo (supponendo che tu stia utilizzando un fuso orario che osserva l'ora legale):

    .
  • Un'ora locale può essere saltato a causa delle transizioni DST, quando gli orologi vanno avanti. Quindi se gli orologi saltano dalle 1 del mattino alle 2 del mattino, poi 1:30 AM non esistono affatto.
  • Un'ora locale può essere ambigua a causa delle transizioni DST, quando gli orologi tornano indietro. Quindi se gli orologi tornano dalle 2:00 alle 1 del mattino, quindi 1:30 AM si verifica due volte a diversi tempi UTC - quale occorrenza sei interessato a?

Dovresti decidere come si desidera gestire questi casi e assicurati che siano trattati nei tuoi test unità.

Un'altra opzione è quella di utilizzare la mia libreria data e oraria, ora noda , che separa i concetti di " Data / ora locale "e" data / ora in un particolare fuso orario "(e altri) in modo più esplicito.

Altri suggerimenti

È necessario utilizzare DateTime.ParseExact per ottenere il valore in un'istanza corretta datetime, quindi è possibile utilizzare .ToUniversalTime() per ottenere il tempo UTC (questo sarebbe rispetto alla differenza di tempo come nella macchina server)

Puoi usare: DateTime.Now.ToUniversalTime();

Non intendo dire che dovresti usare "datetime.ow", ma ottieni il punto che come parte dell'oggetto DateTime hai un metodo per trasformarlo in tempo universale

http://msdn.microsoft.com/en-US / Biblioteca / System.Datetime.touniversaltime.aspx

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