Berechne die Ortszeit eines Menschen in die UTC-Zeit

8

Ich bin ein wenig in der Zeitzone verloren:)

Ich habe Daten mit der Zeit in UTC gespeichert. Der Server ist in den Niederlanden, also leben wir in Utc + 1 (jetzt, mit Tageslichtsparfunktion, in Utc + 2)

Jetzt sagt ein Kunde: gib mir die Daten vom 5. August.

Also muss ich die Zeit aus 'seiner Zeit' berechnen. Dafür muss ich wissen:

was ist dein utc Offset (wir haben das in seinem Profil gespeichert, sagen wir utc -6) bist du in der Tageslichtzeit (denn dann müssen wir +1 addieren und den UTC-Offset -5 machen)

Dann meine Fragen:

  1. Kann ich den .Net-Rahmen fragen: Hat Land XX Tageslichtsparfeit?

  2. Kann ich den .Net-Rahmen fragen: ist 08-05-2010T00: 00: 00 in Land XXX daylightsavingtime in diesem Moment?

Ich habe versucht, die .ToLocalTime (), aber das gibt mir nur die lokale Zeit auf dem Server, und das ist nicht was ich will, ich möchte mit der Zeitzone des Benutzers zu berechnen, und auch mit der Tatsache, dass zu diesem bestimmten Zeitpunkt, wenn er / sie in der Tageslichtzeit ist

Ich habe auch dieses VB-Beispiel gesehen:

%Vor%

aber imho das berücksichtigt nicht, dass der Benutzer in dieser Zeitzone in einem daylightsavingtime (dst) Land ist oder sich nicht befindet. Zum Beispiel ist ein Benutzer in dieser Zeitzone in den Niederlanden dst, und ein anderer ist in einem anderen Land, das keine dst hat.

    
Michel 05.08.2010, 07:31
quelle

3 Antworten

6

Sie können nicht den Rahmen für ein bestimmtes Land fragen - Sie können jedoch nach einer bestimmten Zeitzone fragen.

TimeZoneInfo berücksichtigt die Sommerzeit. (Heck, sonst hätte es die Methode IsDaylightSavingTime nicht.) Wenn Sie es getan haben habe zwei Benutzer, von denen einer gerade DST beobachtet und der andere nicht, dann sind sie nicht in derselben Zeitzone.

Wenn Sie angeben könnten, von welchen Orten Sie sprechen, könnte ich versuchen herauszufinden, welche Zeitzonen beteiligt sind. (Es ist im Allgemeinen einfacher, die Olson-Namen herauszufinden, aber es sollte nicht unmöglich sein, die Windows-IDs herauszufinden.)

    
Jon Skeet 05.08.2010, 07:40
quelle
2

TimeZone-Klasse verfügt über eine IsDaylightSavingTime-Methode, die ein Datum als Parameter verwendet und gibt einen booleschen Wert zurück, der anzeigt, ob das Datum in der Tageslichtsparfunktion für diese Zeitzone ist.

    
Andrea Parodi 05.08.2010 07:42
quelle
2

Ich fördere meinen Kommentar zu einer Antwort. Es scheint ein kompliziertes Problem zu sein. Schau dir Ссылка an, es gibt eine DST-Tabelle in verschiedenen Ländern der Welt. Sie können dies nicht mit statischem Code erreichen, da sich die Sommerzeit nicht nur von Land zu Land ändert, sondern auch von Jahr zu Jahr.

Ich nehme an, Sie müssen eine Tabelle mit DST-Informationen pflegen und Informationen von ihr erhalten.

Oder Sie können einen Webservice abfragen, um solche Informationen zu erhalten.

Sehen Sie Ссылка für einen Webservice an, den Sie abfragen können, um Zeit in verschiedenen Ländern zu erhalten, die DST berücksichtigen (es funktioniert nur für westeuropäische Zeitzonen). Schau dir auch Ссылка an. Sie müssen die Geolokalisierung Ihrer Benutzer dazu bringen, diese Dienste zu nutzen.

    
Andrea Parodi 05.08.2010 08:38
quelle

Tags und Links