IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

ToUniversalTime() : Jour du changement d'heure


Sujet :

C#

  1. #1
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut ToUniversalTime() : Jour du changement d'heure
    Bonjour,

    J'ai un problème avec l'utilisation de la fonction ToUniversalTime().
    Ma date est 2013-10-27 02:06:00.000.

    Le changement d'heure en 2013 est le 2013-10-27 (Passage de l'heure d'été (+2h) en heure d'hiver (+1h)).

    La fonction date.ToUniversalTime() me renvoie la valeur 2013-10-27 01:06:00.000, or ce devrait être 2013-10-27 00:06:00.000 car à 2h du matin on est encore en heure d'été.

    Connaissez-vous un moyen de contournement à cette fonction ?

    Merci
    Let there be light, sound, drums, guitar ... Let there be rock !

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est un bug bien connu du .NET Framework Pour les explications, je te renvoie vers ce lien : Time-travel with .NET or DateTime, DateTimeOffset and the lost DST hour. En très gros, il y a ce problème parce qu'à cause du changement d'heure, on est 2 fois à la même heure, dans l'heure précédant le changement (une fois sur l'heure d'été, et une fois sur l'heure d'hiver).

    Il y a des recommandations de la part de Microsoft, ainsi que des liens pour approfondir sur le sujet.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    Je ne vois pas comment m'en sortir avec cette classe DateTimeOffset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTimeOffset Dto = new DateTimeOffset(new DateTime(2013, 10, 27, 2, 6, 0));
    DateTime dt1 = Dto.DateTime;
    DateTimeOffset dt2 = Dto.UtcDateTime;

    Cela me retourne exactement la même chose. J'imagine qu'il faille utiliser la classe TimeZoneInfo avec ?
    Let there be light, sound, drums, guitar ... Let there be rock !

  4. #4
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    Bonjour,

    Finalement j'ai développé ma propre fonction.
    Comme on a le problème que lors du passage de l'heure d'été vers l'heure d'hiver, voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    /// <summary>
    /// Convertit une date-heure en format UTC
    /// </summary>
    /// <param name="DateHeure">Date-heure d'entrée</param>
    /// <returns>Date-heure au format UTC</returns>
    private DateTime GetDateTimeUtc(DateTime DateHeure)
    {
    	DateTime DateHeureUtc = DateHeure.ToUniversalTime();
     
    	DateTime DateHeureMoins1h = DateHeure.AddHours(-1);
    	if (DateHeureMoins1h.IsDaylightSavingTime() && !DateHeure.IsDaylightSavingTime())
    	{
    		DateHeureUtc = DateHeureUtc.AddHours(-1);
    	}
     
    	return DateHeureUtc;
    }
    Let there be light, sound, drums, guitar ... Let there be rock !

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement ça peut être une solution, sinon sache qu'il existe des librairies qui gèrent déjà ce genre de choses et qui rendent la gestion des dates bien plus simple, comme Noda Time par exemple.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    OK merci, ça peut servir pour une autre fois
    Let there be light, sound, drums, guitar ... Let there be rock !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boost::thread, sleep et changement d'heure
    Par lebaste77 dans le forum Boost
    Réponses: 8
    Dernier message: 11/02/2008, 16h59
  2. détecter le changement d'heure systeme
    Par firejocker dans le forum Visual C++
    Réponses: 7
    Dernier message: 15/05/2007, 17h01
  3. [mise a jour mysql changement cryptage pass]
    Par juliengefi dans le forum Installation
    Réponses: 7
    Dernier message: 23/11/2006, 09h01
  4. [VB]Enlever 1 jour à une date si heure est comprise entre...
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 20/01/2006, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo