2011-12-09 14 views
7

Ho questa UTC + 0 Data:Come convertire la data UTC + 0 in data PST?

2011-11-28T07:21:41.000Z 

e mi piacerebbe, in C#, convertirlo in un Data PST. Come posso farlo? Provato con:

object.Data.ToLocalTime() 

ma non riesco a ottenere il valore corretto (che dovrebbe essere 2011-11-27)

EDIT

anche provato (dopo suggesion su un altro argomento) questo:

DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(object.Data.ToShortDateString()), 
    DateTimeKind.Utc);      

DateTime dt = convertedDate.ToLocalTime(); 
string dataVideo = dt.ToShortDateString(); 

ma la data ancora 28/11/2011, non 27/11/2011

+0

Controllare questa domanda: http://stackoverflow.com/questions/179940/c-sharp-convert-utc-gmt-time-to-local-time – Nayan

+0

provato alcune strategie, come ad esempio 'DateTime.Parse (oggetto. Data.ToShortDateString()). ToLocalTime() 'ma non succede nulla ... – markzzz

+0

Non vedo una modalità di errore tranne una: controlla che la tua macchina sia effettivamente nel fuso orario PST. Documenta il tempo che ottieni, non solo la data. –

risposta

11

ho cambiato il mio orologio da usare UTC-08:00 Pacific Time.

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("PST: " + timestamp.ToLocalTime()); 

uscita:

UTC: 28/11/2011 7:21:41 
PST: 27/11/2011 23:21:41 

Esempio con TimeZoneInfo

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("GMT+1: " + timestamp.ToLocalTime()); 
Console.WriteLine("PST: " + TimeZoneInfo.ConvertTimeBySystemTimeZoneId(timestamp, "Pacific Standard Time")); 

uscita:

UTC: 28/11/2011 7:21:41 
GMT+1: 28/11/2011 8:21:41 
PST: 27/11/2011 23:21:41 
+0

Innanzitutto, non posso rilasciare la Z (non voglio ottenere una sostituzione di stringa in una data, è orribile). In secondo luogo, no, non fa il trucco: la data ancora del 28/11/2011, che, su PST, è il 27/11/2011 (12 ore prima). – markzzz

+1

Non riesco a chiudere la Z. Ho aggiornato la risposta. PST è UTC-08: 00 per quanto posso vedere, non UTC-12: 00? – Stijn

+0

: O! Ma ho bisogno di stampare quel valore senza cambiare orologio del mio computer :) Esiste un metodo per convertire una certa data in UTC (la mia data) in data PST ?. Sì, mi spiace, è UTC-08: 00, UTC-12: 00 dovrebbe essere PDT ... – markzzz

1

Per un po 'più di colore

2011-11-28T07:21:41.000Z

Questo è un ISO8601 timestamp, il Z alla fine sta per UTC. Questo rappresenta un'istanza specifica nel tempo.

DateTime.Parse restituirà una struttura temporale di data locale, ci sono tre tipi di tipi datetime, UTC, Locale e Non specificato.

Se si tenta di visualizzare questo, verrà visualizzato questo istante nel fuso orario corrente del computer (Sono ora orientale, quindi quando lo stampo ottengo 11/28/2011 2:21:41 AM).

Se voglio cambiare questo DateTime Kind a UTC, avrei potuto fare qualcosa di simile

DateTime.Parse("2011-11-28T07:21:41.000Z").ToUniversalTime()

stampa questa ora (dal momento che è sorta è ora UTC) ottengo 11/28/2011 7:21:41 AM.

Si noti che sebbene l'ora sia stampata in modo diverso entrambi questi orari si riferiscono allo stesso istante di tempo.

Per visualizzare questo istante in un fuso orario diverso, il modo più semplice in imo è la classe TimeZoneInfo (anche se non sono sicuro che sia accurato al 100%).

TimeZoneInfo.ConverTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time").

Stampa ora produrrà il risultato desiderato 11/27/2011 11:21:41 PM

Nota che la proprietà questo ritorno di DateTime Kind è ora Unspecified, che significa che non sarà in grado di trasferire di nuovo a UTC, senza ulteriori informazioni. Non hai più un istante specifico nel tempo, ma hai un tempo non specificato. Sappiamo che è lo stesso istante di quelli precedenti in tempi pacifici, ma il computer non lo sa più. Tienilo a mente se vuoi conservare questa volta.

Problemi correlati