je convertir une chaîne qui représente un temps dans le fuseau horaire du Pacifique que j'utilise pour créer un objet DateTime
:TimeZoneInfo.ConvertTime de PST à UTC à AEST - hors d'une heure
var pacificDateTime = new DateTime(2016, 11, 16, 15, 0, 0) // 11/16/2016 3:00:00 PM
En utilisant, je créer un DateTimeOffset
parce que finalement, il devient un peu plus facile de travailler avec.
var pacificTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var dateTimeNoKind = new DateTime(pacificDateTime.Ticks, DateTimeKind.Unspecified)
var DateTimeOffsetValue = TimeZoneInfo.ConverTimeToUtc(dateTimeNoKind, pacificTimeZoneInfo) // 11/16/2016 11:00:00 PM
Jusqu'ici tout va bien. La différence entre UTC et Pacific est que l'UTC est en avance de 8 heures (l'heure est à l'heure d'été).
Ensuite, je veux convertir UTC à AEST, mais c'est là le problème apparaît:
var australianEasternTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
TimeZoneInfo.ConvertTime(DateTimeOffsetValue, australianEasternTimeZoneInfo) // 11/17/2016 10:00:00 AM
AEST est en avance sur UTC de 10 heures. Je m'attendais à ce que la valeur soit 11/17/2016 09:00:00 AM
mais au lieu de cela je reçois une heure supplémentaire ajoutée à mon résultat. En tant que test, lorsque je convertis en PST ou GMT ou EST à partir de l'heure UTC, ils semblent se reconvertir correctement. J'ai l'impression qu'il me manque quelque chose d'évident ou que je néglige quelque chose de simple?
AEST est actuellement UTC + 11, pas UTC + 10. Nous sommes en plein jour. 'TimeZoneInfo.FindSystemTimeZoneById (" AUS Eastern Standard Time ") IsDaylightSavingTime (DateTime.UtcNow)' – Rob
@Rob réellement AEST est toujours UTC + 10, c'est juste l'Australie ne l'observe pas actuellement mais AEDT. – zerkms
@zerkms Vous avez raison - c'est une distinction que j'ai oubliée. Cependant, '' "AUS Eastern Standard Time" 'est mappé en interne à la même zone, avec un' DaylightName' et 'StandardName' – Rob