2017-01-25 8 views
0

Siehe meinen Code, den ich verwendet, um Mexiko Datum und Uhrzeit zu UTC Datum und Uhrzeit zu konvertieren.C# Wie UTC Datum Zeit nach Mexiko Datum Zeit konvertieren

string strDateTime = "25/01/2017 07:31:00 AM"; 
    DateTime localDateTime = DateTime.Parse(strDateTime); 
    DateTime univDateTime = localDateTime.ToUniversalTime(); 

ToUniversalTime Rückkehr UTC 25-01-2017 02:01:00

wenn wieder ich versuche, das gleiche UTC Datum und Uhrzeit UTC 25-01-2017 02:01:00 nach Mexiko Ortszeit zu konvertieren Ich habe dann 24-01-2017 06:01:00

so 07:31:00 AM becomes 06:01:00 sehen, welche nicht richtig. Also sagen Sie mir, was fehlt in meinem Code, für den ich falsche Ortszeit bekomme, wenn ich von UTC nach Mexiko Zeit mit Timezone Info konvertieren.

sehen Sie meinen Code, der Konvertierung von Utc nach Mexiko Ortszeit mit Timezone Info.

string strDateTime = "25-01-2017 02:01:00"; 
    DateTime utcDateTime = DateTime.Parse(strDateTime); 
    string nzTimeZoneKey = "Pacific Standard Time (Mexico)"; 
    TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone); 
+0

können Sie überprüfen, welches Ergebnis erhalten Sie, wenn Sie 'TimeZoneInfo.Local' geben? –

+0

Nebenbei bemerkt, "Pacific Standard Time (Mexiko)" ist für den nördlichen Teil der Halbinsel Baja California. Zu den Städten gehören Tijuana und Mexicali, und auf Spanisch heißt es "Zona Noroeste". Es ist * nicht * Mexikos "Zona Pacifico". Siehe [Wikipedia Artikel in Time in Mexico] (https://en.wikipedia.org/wiki/Time_in_Mexico). Mexiko hat vier Zeitzonen, also wählen Sie die richtige aus. –

+0

Auch gibt es keinen logischen Unterschied zwischen den Windows-Zeitzonen-IDs "Pacific Standard Time (Mexiko)" und "Pacific Standard Time". Früher dachte man, dass ein Teil des Mexikos Mexikos DST-Übergangsdaten (anstelle der US-Übergangstermine) verwendete, aber das stellte sich als nicht zutreffend heraus und die Daten wurden korrigiert. Dieser ganze Bereich ist mit den US-DST-Übergängen (nicht den Mexiko-Übergängen) ausgerichtet. –

Antwort

2

Okay, ich wusste nicht, dass man in Indien wurden - die Dinge ein wenig verändert:

Du wirst die TimeZoneInfo.ConvertTime() API für diese nutzen wollen .. Vielleicht etwas wie:

var dt = new DateTime(2017, 01, 25, 7, 31, 0).ToUniversalTime(); 
    var nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time (Mexico)"); 
    //var ist = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Utc, nzTimeZone); 
+0

Wenn mein Datumsformat falsch ist, wie kann das Datum/Uhrzeit-Pars es analysieren? – Mou

+0

Nun, wenn Ihr Code erfolgreich ausgeführt wurde, ist es in Ordnung, aber nicht in der Art, die Sie erwarten. Bitte beachten Sie die Datumsformate von [MSDN] (https://msdn.microsoft.com/en-us/library/az4se3k1 (v = vs.110) .aspx) - Sie sehen nicht einmal das String-Format des Datums Sie versuchen, –

+0

zu verwenden, führen Sie Ihren Code aus, aber noch bekomme ich falsche Zeit, die '06: 01: 00' anstelle von '07: 31: 00' ist. Wenn Sie möchten, kann ich den Screenshot meines Debugging-Bildschirms von VS2013 IDE hochladen. – Mou

2

Sie aktuelle Zeitzone (UTC+05:30) unterscheidet sich von der Zeitzone in (UTC-8:00) konvertieren. So bekommst du den Unterschied. Es gibt ungefähr 13 Stunden und 30 Minuten von der ursprünglichen Zeitzone bis zur Zielzeit. 5:30 - (-8) = 13:30.

Subtrahieren Sie 13 Stunden und 30 Minuten von Ihrem ursprünglichen Datum, und dann erhalten Sie 18:01:00, die im 12-Stunden-Format 6PM am vorherigen Tag ist.

Edit:

Statt Hartcodierung Mexico Zeitzone, die Sie benötigen, ein Verfahren haben, mit dem Sie Benutzer-Zeitzone bestimmen kann, egal wo sie herkommen. Dies geschieht am besten mit JavaScript, wie in this answer beschrieben.

+0

wie man es programmatisch macht. würden Sie bitte einen Code posten, um es zu erreichen. Danke – Mou

+0

Ich möchte nicht hart Code 'Subtract 13 Stunden und 30 Minuten 'Ich möchte UTC Datum und Uhrzeit zu Client lokale Zeit konvertieren Bereitstellung Zeitzone info. – Mou

+1

Hier gibt es keine harte Codierung. Das ist die korrekte Ortszeit des Kunden, die Ihrer Ortszeit entspricht. Wenn Sie am Morgen sind, sind sie nachts, es gibt keinen Fehler darin. Also der Code ist in Ordnung. Die eigentliche Frage ist, was willst du erreichen? –

1

Ihr Problem ist, dass die Parse ohne Angabe der Zeitzone ausgeführt wird, aus der es stammt - daher wird das System verwenden, was auch immer der Standard Ihres Computers ist. Es scheint, dass Ihr Computer NICHT in PST ist. Eher irgendwo in Indien.

Daher müssen Sie es in ein DateTime-Objekt umwandeln, indem Sie es in UTC umwandeln, indem Sie die PST-Zeitzone angeben. Es gibt mehrere Möglichkeiten, dies zu tun:

  1. Geben Sie den Zeitzonenoffset als Teil der Zeichenfolge an.
  2. Anruf eines der TimeZoneInfo.ConvertTimeToUtc und geben Sie die TimeZoneID

Vielleicht tun alles, was Sie wollen, ist durch den Aufruf ConvertTime oder ConvertTimeByTimeZoneId zwischen zwei Zeitzonen zu konvertieren.


    string pst = "Pacific Standard Time"; 
    TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, pst)); 

Zum Beispiel: 07.30 PST sollte 01.30 UTC - nicht 02.30. Dies deutet auf ein Problem bei der anfänglichen Konvertierung hin. 2 UTC UTC bis PST ist tatsächlich 18 Uhr. Außerdem habe ich bemerkt, dass deine Eingabe 7:31 war und du behauptest, dass sie 2:01 ausgegeben hat - macht Mexiko 30-minütige Zeitzonen? Ich weiß, dass Indien es tut.

Ich verwende Google, um Konversionen zu testen, indem ich buchstäblich nach "2:01 UTC to PST" suche und die Antwort zum Vergleich zurücksende.

Sehen Sie sich diesen anderen Beitrag an, der die Eingabe der Zeitzone für das Parsing anzeigt. Und wie gesagt, man muss nicht für DST konvertieren. Does ConvertTimeFromUtc() and ToUniversalTime() handle DST?

Weitere Informationen über MSDN für Timezone: https://msdn.microsoft.com/en-us/library/bb495915(v=vs.110).aspx

+0

was du hier gesagt hast ist mir nicht sehr klar um mein Codebeispiel zu korrigieren. Es wird hilfreich sein, wenn Sie meinen geposteten Code sehen und hier posten, nachdem Sie ihn korrigiert haben. Grundsätzlich möchte ich Datum und Uhrzeit nach Mexiko Datum und Uhrzeit konvertieren. – Mou