Obtenir le format Windows long

J’essaie d’obtenir le format long dans Windows (comme “hh: mm: ss tt”). Je peux obtenir le format court comme ceci:

GetLocaleInfoEx(NULL, LOCALE_STIMEFORMAT, format, 100); 

Je n’arrive pas à trouver une constante pour LOCALE_LTIMEFORMAT ou quelque chose comme ça. Je peux obtenir le temps court, la date courte et la date longue, mais comment puis-je interroger le format long de l’utilisateur actuel?

Autant que je LOCALE_STIMEFORMAT , Windows définit le format de temps «long» par LOCALE_STIMEFORMAT (défini sur quelque chose comme «hh: mm: ss») et le temps court comme LOCALE_SSHORTTIME (qui, selon MSDN, est valide pour Windows 7 et plus tard).

Cela correspond-il à vos constatations, c.-à-d. Correspond-il à la préférence de l’utilisateur dans l’élément du panneau de configuration Région et langue?

Pour le spécificateur t , s’il n’est pas inclus dans le format local, vous devez toujours utiliser un format personnalisé (comme dit gbjbaanb), ou peut-être examiner la chaîne de format pour la présence de t ou tt , et s’il est absent c’est vous-même (cependant, cela pourrait conduire à des résultats bizarres pour les cultures qui attendent le tt avant l’heure générale, par exemple). Cela ne devrait cependant pas être nécessaire, car le format temporel utilisé par les parameters régionaux est responsable de la génération de chaînes de temps qui ont du sens (en distinguant par exemple AM ​​et PM).

Ce que vous recherchez est déjà inclus dans LOCALE_STIMEFORMAT. Exemple de code:

 wchar_t format[80]; // 80 is always enough int ret = GetLocaleInfoEx( LOCALE_NAME_USER_DEFAULT, LOCALE_STIMEFORMAT, format, sizeof(format) / sizeof(*format)); if (ret == 0) die(GetLastError()); std::wcout << format << std::endl; 

Sortie sur ma machine (j'habite aux USA):

h: mm: ss tt

La partie "tt" sera absente pour toute personnalisation de culture ou de parameters régionaux qui n'affiche pas l'indicateur AM / PM.

Le LOCALE_STIMEFORMAT est le format long time. Pour obtenir le format court, vous pouvez utiliser LOCALE_SSHORTTIME partir de Windows 7 ou couper les secondes .

Pour confirmer cela, changez simplement le format de temps long dans vos parameters Panneau de configuration / Région et Langue.

Essayez de l’utiliser avec les constantes LOCALE_S1159 et LOCALE_2359 qui renvoient le texte pour les indicateurs AM / PM.

Je pense que le problème est que le format de l’heure est un format de l’heure, jusqu’au second. Vous devez le formater vous-même si vous voulez AM / PM comme vous le faites avec les indicateurs d’heure d’été ou de fuseau horaire.