Convertir DateTime au format Utc seulement si ce n'est déjà Utc

Je suis en utilisant le DateTimeWithZone struct que Jon Skeet posté à La création d'un DateTime dans un fuseau Horaire spécifique en c# fx 3.5

Cela ne fonctionne pas exactement pour ma situation, car il suppose que la date-heure passée dans le constructeur est le heure locale, et, par conséquent, le convertit à l'Utc en utilisant le Fuseau horaire spécifié.

Dans mon cas, on va surtout être de passage dans DateTime objets déjà en Utc (puisque c'est ce que nous emmagasinons) nous avons donc besoin de faire la conversion, si la source de données DateTime.Le genre n'est pas l'heure Utc.

Donc j'ai changé le constructeur:

    public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) {
        dateTime = DateTime.SpecifyKind(dateTime, kind);
        utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
        this.timeZone = timeZone;
    }

Ici, nous avons une option de Type de paramètre que les valeurs par défaut à l'Utc.

Toutefois, l'exécution de ce code, et en passant une Utc DateTime génère l'exception suivante:

La conversion n'a pu être effectué car le DateTime ne pas avoir le Genre bien défini correctement. Par exemple, lorsque le Type de la propriété est DateTimeKind.Local, la source de fuseau horaire doit être TimeZoneInfo.Locaux.

Selon les docs (http://msdn.microsoft.com/en-us/library/bb495915.aspx):

Si le Type de propriété de type dateTime paramètre est égal à DateTimeKind.L'Utc et le sourceTimeZone paramètre est égal à TimeZoneInfo.Utc, cette méthode retourne dateTime sans effectuer de conversion.

Depuis deux le temps d'entrée et le fuseau horaire, les deux ont une Sorte de propriété de l'Utc, puis je voudrais vous attendez pas à obtenir cette exception.

Ai-je mal compris?

Est que votre système d'exploitation XP ?
Non, c'est Windows 7

OriginalL'auteur Ben Foster | 2011-05-27