Migration vom lokalen server auf Azure: ZEITZONE UTC. Wie zu lösen?
Entwarf ich meine Anwendung in Anbetracht der Tatsache, dass, gemäß der Vorgaben,
sollte die Ausführung auf einem server befindet sich in Italien und den Kunden italienische Volk nur.
Etwa einem Monat, mein bos entschieden, um Sie alle auf Azure.
Ging alles reibungslos. Die einzige Sache, die mir einige problem ist die Tatsache, dass der time-server ist UTC.
Die Lösungen sind:
A) einfache
ändern Sie ein Startskript, um die server-Zeit (
http://netindonesia.net/blogs/wely/archive/2011/06/26/setting-timezone-in-windows-azure.aspx
)
B) aufwendiger
Ändern, um jede Anwendung zu verwenden UTC-Zeit und zeigen die richtige Uhrzeit in die lokale Zeit konvertiert.
Wenn ich mich für die Lösung meiner Zweifel ist, dass die Tatsache, dass der server eingerichtet ist, eine andere Zeitzone kann es irgendwie zu Konflikten mit Azure.
Ist das wahr?
- Option A klingt einfach genug, obwohl Sie müssen, um sicherzustellen, dass es funktioniert mit Sommerzeit, oder Sie finden alles, was ist eine Stunde im Sommer. Wenn ich hatte das gleiche Problem ich entschied mich zu gehen, mit option B, weil dann würde ich keine Probleme haben mit Menschen, die Nutzung der app im Ausland.
- Können Sie uns sagen, ein wenig mehr über Ihre Architektur. Ist es web-basiert bzw. windows-client, geht es dann durch die web-services etc. Dann sollten wir in der Lage sein, um Ihnen zu helfen mehr.
- Alle Windows Azure-VMs sind unter UTC, und IMHO ist dies eine sehr gute Eigenschaft design der cloud. Gehen Sie für die für B, du wirst es nicht bereuen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich mich gefragt, auf MS-support.
Dies ist die Antwort:
Änderung der server-Zeit auf der Azure-Virtuellen Computern unter Verwendung eines startup-task wird nicht empfohlen, sollte man eher Methoden wie TimeZoneInfo.ConvertTimeFromUTCTime in Ihrem code.
Also werde ich nicht ändern Sie die server-Zeitzone.
Warten auf eine Antwort vom support, den ich entdecken, dass SQL Server 2008 haben, eine DateTimeOffset-Datentyp, der ist perfekt!
http://blogs.msdn.com/b/davidrickard/archive/2012/04/07/system-datetime-good-practices-and-common-pitfalls.aspx
Vor ein paar Jahren habe ich begonnen, die Gestaltung alle meine apps, um somit verarbeiten von Daten unter Verwendung von UTC auf dem client und dem server und haben es nicht bereut, seit.
Gibt es zwei Probleme mit DateTime.Jetzt und DateTime.Heute auf einer client-Seite und server-Seite.
Geben Sie DateTime-Objekt vom client zum Azure seiner Art entspricht, um Lokale und Zeitzoneninformationen enthält.
(Juni 10, 2011, 12:30 Uhr -7)
Jedoch, wenn Sie es speichern in die Datenbank die region-Informationen verloren gehen. Später, beim Lesen von diesem Feld aus der Datenbank, die Sie erstellt DateTime mit einem Utc-region (Juni 10, 2011, 12:30 Uhr 0)
Schließlich, Ihre client liest die datetime falsch.
Es gibt mehrere Möglichkeiten, um dieses Problem zu beheben, der auf einem client Seite.
1) Umwandeln, DateTime in DateTimeOffset in die Parameter der Methode als auch in der Datenbank. Dies wird garantieren, dass Ihre Lokale region (dh PST) gespeichert werden in der db
2) Mit DateTime.SpecifyKind(dateTime, DateTimeKind.Nicht spezifiziert) - diese Art von DateTime nicht angegeben ist und anschließend gespeichert werden, als in der db.
Vorsichtig sein, um call DateTime.Jetzt auf die server Seite. Verwenden Sie besser DateTime.UtcNow. Diese Zeit sollte nicht verwendet werden, für business-Daten. Im Idealfall müssten Sie umgestalten von code und pass DateTime-oder DateTimeOffset-client.