Die Antartica-Antwort funktioniert nur für die Zeitzonen, die UTC entsprechen. Ich bin ziemlich traumatisiert mit dieser Funktion und nach stundenlangem Ausprobieren habe ich es geschafft, eine praktische Konvertierungserweiterungsfunktion zu erstellen, die mit allen Zeitzonen funktioniert.
static public class DateTimeFunctions
{
static public DateTimeOffset ConvertUtcTimeToTimeZone(this DateTime dateTime, string toTimeZoneDesc)
{
if (dateTime.Kind != DateTimeKind.Utc) throw new Exception("dateTime needs to have Kind property set to Utc");
var toUtcOffset = TimeZoneInfo.FindSystemTimeZoneById(toTimeZoneDesc).GetUtcOffset(dateTime);
var convertedTime = DateTime.SpecifyKind(dateTime.Add(toUtcOffset), DateTimeKind.Unspecified);
return new DateTimeOffset(convertedTime, toUtcOffset);
}
}
Beispiel:
var currentTimeInPacificTime = DateTime.UtcNow.ConvertUtcTimeToTimeZone("Pacific Standard Time");
Ich habe einen zusätzlichen Schritt zu gehen, um meine lokale Zeit zu erhalten: var offset = tzi.GetUtcOffset (utcTime); var siteLocalTime = utcTime.Add (Offset); return siteLocalTime.ToString ("MM/tt/HH: mm"); –
Dieser Code wird nicht kompiliert. Diese Zeitzonen-ID existiert nicht und wenn Sie sie durch eine gültige ersetzen, erhalten Sie eine Fehlermeldung über 'Der UTC-Offset für Utc DateTime-Instanzen muss 0' sein. –
um Fehler in dateAndOffset zu vermeiden Wählen Sie DateTime cstTime = utcTime.AddTicks (soutPole.BaseUtcOffset.Ticks); –