Ich habe eine asp.net-mvc-Website, die ich übernahm und es gibt eine Seite Seite, wo Menschen Informationen und Zeiten eingeben (einschließlich lokaler Zeitzone). Die Datenbank besteht aus einer Startzeit, einer Endzeit und einer Zeitzone, da es sich für mich etwas flockig anfühlt. hier ist der Code der Liste zur Auswahl zu erhalten:Was ist der beste Weg Zeitzoneninformationen in meiner Datenbank zu speichern?
static private IEnumerable<SelectListItem> GetTimeZones(string selected)
{
var timeZoneNames = TimeZoneInfo.GetSystemTimeZones()
.Where(tz => tz.DisplayName.Contains("London")
|| tz.DisplayName.Contains("Hong Kong")
|| tz.DisplayName.Contains("Mumbai")
|| tz.DisplayName.Contains("Eastern Time"))
.ConvertAll(tz => tz.DisplayName).ToList();
var items = new List<SelectListItem>();
foreach (var item in timeZoneNames)
{
var slItem = new SelectListItem();
slItem.Text = item;
slItem.Value = item;
slItem.Selected = item == selected;
items.Add(slItem);
}
return items;
}
So ist es einfach zu speichern Sie die vollständige Zeichenfolge, die von TimeZoneInfo.GetSystemTimeZones()
Gibt es Mängel bei diesem Ansatz zurückgegeben wird? Ich bin ein wenig besorgt reading here, dass dies lokal von der Maschine als was kommt, wenn verschiedene Maschinen unterschiedliche Einstellungen haben. Außerdem versuchen Sie herauszufinden, ob alles als UTC oder GMT usw. . Irgendwelche besseren Vorschläge? Zum Beispiel, sollte ich die Konvertierung zu UTC auf der Website vornehmen und alle Zeiten in der Datenbank normalisieren?
Welche Version von SQL Server? SQL Server 2008 führte ['DATETIMEOFFSET'] (http://msdn.microsoft.com/en-us/library/bb630289 (v = sql.100) .aspx) ein. Ich muss noch eine Verwendung dafür finden (ich würde die Zeitzone des Benutzers lieber einmal speichern, das Datum als UTC speichern und pro Benutzer anpassen), aber andere behaupten, dass sie für diesen Zweck verwendet werden kann. –
Es gibt eine negative Seite, um die Datumszeit als UTC in der Datenbank zu speichern. Wie berücksichtigen Sie DST auf der DB-Seite? Es gibt keine Möglichkeit, eine DateTime oder DateTime2 in die lokale Zeit des Benutzers in Bezug auf Zeitzonen und DST zu konvertieren. Wenn Sie einen Offset übergeben, könnten Sie immer noch aussteigen, weil ein Tag in der Sommerzeit ist und einer nicht. Beispiel 3/10/2012 2:00:00 EST ist 3/09/2012 20:00:00 UTC aber 3/13/2012 2:00:00 EST ist 3/12/2012 19:00:00 UTC. Grundsätzlich ein Offset von -4 bzw. -5. Also welchen Offset gibst du in deinen SP -4 oder -5, um die UTC in local zu konvertieren? So oder so ist man falsch. – aBetterGamer