none
Lire le format "Short Time" des paramètres régionaux RRS feed

  • Question

  • Bonjour,

    La System.Globalization.CultureInfo.CurrentCulture charge les formats des heures relatifs à la culture en cours, mais pas ceux qui ont été personnalisés. 

    ex: "h:mm tt" pour la culture "en-US" au lieu de "HH:mm" (<- format personnalisé)

    Merci de votre aide !

    vendredi 24 septembre 2010 09:25

Réponses

  • Le problème se clarifie à défaut de se résoudre. Je n'ai pas testé tous les cas mais j'ai bien une différence de comportement entre versions. Sur un Windows 7 fr avec HH'h'mm dans le panneau de config, je récupère bien HH'h'mm si je cible .NET 4 mais je récupère effectivement HH:mm si je cible .NET 2.0.

    Dans les deux cas le UseUserOverride est True. A suivre...

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse kyz mercredi 29 septembre 2010 09:04
    mercredi 29 septembre 2010 08:53
    Modérateur

Toutes les réponses

  • Bonjour,

    Le principe : créer une nouvelle culture à partir d'une culture déjà existante et changer la culture courante :

      Dim c As CultureInfo
    
      c = New CultureInfo("en-US")
      c.DateTimeFormat.ShortTimePattern = "hh:MM"
    
      Thread.CurrentThread.CurrentCulture = c
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 24 septembre 2010 09:54
    Modérateur
  • Merci de votre réponse (qui ne correspond pas à mon problème) !

    En fait, je cherche à récupérer le format des heures définit dans les paramètres régionaux d'un utilisateur totalement inconnu.

    vendredi 24 septembre 2010 10:25
  • Bonjour,

    Merci de votre réponse (qui ne correspond pas à mon problème) !
    La question a donc été mal posée.

    En fait, je cherche à récupérer le format des heures définit dans les paramètres régionaux d'un utilisateur totalement inconnu.
    C'est à dire ? Comment voulez vous récupérer des informations sur une personne que vous ne connaissez pas ???

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 24 septembre 2010 12:22
    Modérateur
  • Bonjour,

    ce que vous recherchez a faire c'est uniquement récupérer le format de ses paramètre régionaux par exemple ce que vous voulez recuperer c'est HH:mm ou H:MM:ss

    et ne pas forcement recuperer la valeur ? (juste le format quoi)

     

    A bientot

     


    Cordialement, Troxsa
    vendredi 24 septembre 2010 19:49
    Auteur de réponse
  • Bonjour,

     

    Kyz, pouvez-vous clarifier votre problème et mieux expliquer ce que vous voulez faire ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    lundi 27 septembre 2010 11:07
  • Bonjour,

    Et quelle est la méthode utilisée ? Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern semble ok chez moi (si j'affiche cette valeur, je vois la valeur que j'ai configurée dans le panneau de configuration si c'est bien ce que l'on cherche à faire).

    Par contre cette information est mise en cache et un changement ne sera visible qu'après avoir relancé l'appli.

    Sinon  donner un peu plus d'info sur ce qui est fait...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    lundi 27 septembre 2010 11:41
    Modérateur
  • FAUX !

    System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern renvoie uniquement le format correspondant à la culture choisie. Si ce format ne convient pas à un utilisateur et qu'il le modifie, le shorttimePattern vaut toujours la même valeur (qui est le format par défaut relatif à la culture en cours).

    Ce n'est donc pas le ShortTimePattern qui contient les paramètres régionaux définis par l'utilisateur.

    Mon problème : Comment connaître le DateTimeFormat définit dans les paramètres régionaux ?

    lundi 27 septembre 2010 16:00
  • Bonjour,

     

    Comment faites-vous pour modifier, en tant qu’utilisateur, le format de date ? J’ai l’impression qu’on parle de choses différentes ici.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mardi 28 septembre 2010 09:53
  • Toujours se méfier des conclusions hatives ;-) Cela donne quoi avec InstalledCulture au lieu de CurrentCulture (j'ai testé avec au moins l'un des deux et je suis quasi-sûr que j'obtenais le même résultat dans les deux cas).

    Quelle est la valeur retournée par System.Globalization.CultureInfo.CurrentCulture.UseUserOverride ? (True chez moi ?)

    La "CurrentCulture" est elle celle par défaut où as t'elle été réaffectée par programmation ?

    Egalement je teste sous Windows 7, .NET 4.0.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 28 septembre 2010 10:01
    Modérateur
  • Je confirme. J'obtiens bien de mon côté HH:mm. Je vais ensuite dans le panneau de config, je relance l'appli et j'ai par exemple HH' h 'mm si c'est ce que j'ai choisi.

    La machine est-elle en "en-us" ? Je pense que la machine n'est pas en "en-us" mais que l'on veut explicitement passer la culture courante en "en-us" tout en préservant les choix de l'utilisateur ?

    D'après http://msdn.microsoft.com/fr-fr/library/system.globalization.cultureinfo.useuseroverride.aspx cela ne semble pas possible (ne fonctionne que si "si la culture spécifiée correspond à la culture actuelle de Windows") sans doute car dans certains cas les différences entre culture sont telles que ce n'est tout simplement pas possible.

    On en revient à une suggestion semblable à celle de Gilles (récupérer les infos avant d'instancier la nouvelle culture et d'en changer les paramètres ?).

    Eventuellement expliquer le but poursuivi (par exemple si c'est pour "forcer" ponctuellement l'utilisation des ressources "us" plutôt que les ressources "fr" disponibles par ailleurs, il serait sans doute suffisant de changer CurrentUICulture en gardant CurrentCulture). Selon le but, une autre approche est peut-être possible ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 28 septembre 2010 11:11
    Modérateur
  • Comment mon utilisateur peut modifier le format de l'heure dans les paramètres régionaux (windows 7) :

    Panneau de configuration / Région et langue / Modifier le format de la date, de l'heure ou des nombres / Onglet Formats / il change le format de l'heure courte / il appuie sur le bouton Appliquer

    et voilà !

    mercredi 29 septembre 2010 07:47
  • Voilà mes résultats (windows 7 français - .Net 2.0) : 


    Format par défaut ShortTimePattern (InstalledUICulture) ShortTimePattern (CurrentCulture) ShortTimePattern (CurrentUICulture)
    Windows 7 français HH:mm


    Culture française HH:mm HH:mm HH:mm HH:mm
    Culture Anglais (US) h:mm tt HH:mm h:mm tt HH:mm






    Format personnalisé


    Culture française HH'h'mm HH:mm HH:mm HH:mm
    Culture Anglais (US) hh:mm tt HH:mm h:mm tt HH:mm

     

    Est-ce que vous avez des résultats différents avec .Net 4 ???

    Merci de votre intérêt pour mon problème.

    Cordialement,

    Kyz

    mercredi 29 septembre 2010 08:19
  • J'ai les mêmes résultats avec .Net 3.5 et je n'ai pas .Net 4.

    Le UseUserOverride est bien à True.

    Mes conclusions : les formats des heures personnalisés ne sont pas pris en compte par le ShortTimePattern de CurrentCulture. 

    Ma solution temporaire : j'impose un format des heures que je maîtrise (ShortTimePattern de InvariantCulture).

    Mon graal : que les utilisateurs puissent choisir le format des heures qui leur convient via les paramètres régionaux.  

    mercredi 29 septembre 2010 08:37
  • Le problème se clarifie à défaut de se résoudre. Je n'ai pas testé tous les cas mais j'ai bien une différence de comportement entre versions. Sur un Windows 7 fr avec HH'h'mm dans le panneau de config, je récupère bien HH'h'mm si je cible .NET 4 mais je récupère effectivement HH:mm si je cible .NET 2.0.

    Dans les deux cas le UseUserOverride est True. A suivre...

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse kyz mercredi 29 septembre 2010 09:04
    mercredi 29 septembre 2010 08:53
    Modérateur
  • Bonjour,

     

    Je confirme la réponse de M. Scribe, le format affiché par l’application .NET correspond au format choisi par l’utilisateur si vous redémarrez l’application. Pour les différences entre .NET 2 et .NET 4 en ce que concernent les implémentations des cultures, je crois qu’une question sur Microsoft Connect vous apportera des informations plus détaillées.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 29 septembre 2010 09:04
  • Merci ! C'est une bonne nouvelle, le problème sera résolu en .Net 4
    mercredi 29 septembre 2010 09:06
  • Même la doc de la 2.0 semble dire que la config définie par l'utilisateur devrait être prise en compte (http://msdn.microsoft.com/fr-fr/library/system.globalization.cultureinfo.datetimeformat(v=VS.80).aspx et voir le paragraphe "substitution"). Il serait intéressant de tester sous Windows XP (pb lié à l'OS ?)

    Pour l'instant je ne vois guère d'autre solution que de modifier la culture en récupérant les infos via l'API Win32 ou moins pour les plus courantes.

    Je ne sais pas spécialement mais cela a l'air d'être GetLocale/GetLocaleEx (http://www.pinvoke.net/default.aspx/kernel32/GetLocaleInfoEx.html).

    Bon courage.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 29 septembre 2010 11:08
    Modérateur
  • Sous windows XP .Net 2.0, ça marche très bien SI la culture spécifiée correspond à la culture actuelle de Windows.

    Donc il y a effectivement un problème spécifique lié à la combinaison Windows 7 / .Net 2 ou 3.5. 

    mercredi 29 septembre 2010 12:07