2009-04-02 9 views
2

Pourquoi la fonction ToUniversalTime n'a aucun effet ici;Conversion .NET 2.0 DateTime UTC

DateTime dt = new DateTime(2009,3,24,1,0,0,DateTimeKind.Local); 
dt = dt.ToUniversalTime(); // convert BST to UTC ? 
dt.ToString(); 

"24/03/2009 01:00:00" ... non?

est le même que ..

DateTime dt = new DateTime(2009,3,24,1,0,0,DateTimeKind.Utc); 
dt = dt.ToUniversalTime(); // nothing to do, already utc 
dt.ToString(); 

"24/03/2009 01:00:00" ... correct. Je m'attendais à ce qu'il y ait un ajustement à la valeur ToString() du premier exemple, où par le DateTime spécifié comme Local entraînerait un calcul TimeZone correspondant lors de l'appel à ToUniversalTime() et l'heure au Royaume-Uni devrait ont abouti à "24/03/2009 00:00:00" comme UTC.

Cependant, il semble que la spécification de DateTimeKind rende ToUniversalTime ou ToLocalTime impossible à effectuer un calcul.

Répondre

5

Êtes-vous au Royaume-Uni par hasard? Bien que nous soyons maintenant à l'heure d'été, la date que vous spécifiez dans votre code est antérieure à cette commutation, donc l'heure locale et l'heure UTC au Royaume-Uni sont les mêmes. Si vous spécifiez April comme mois, vous verrez une différence d'une heure.

0

Cheers David M. Pas eu mon petit-déjeuner. En effet, lorsque je répète le test avec des dates qui dépassent le seuil d'heure d'été BST, le comportement est bien sûr correct.

DateTime dt = new DateTime(2009,4,24,1,0,0,DateTimeKind.Local); 
dt = dt.ToUniversalTime(); // convert BST to UTC ? 
dt.ToString(); // "24/04/2009 00:00:00" ... correct 

Et pour confirmer, la méthode ToString() semble sortie en fonction de la propriété Kind.