Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

strptime pour windows !

5 réponses
Avatar
actuados
Bonjour, j'essaye de trouver un =E9quivalent de la fonction strptime
pour windows, mais apr=E8s plusieurs heures de recherche dans les mans,
je ne la trouve pas !

Auriez vous une id=E9e de ce que je pourrais utiliser pour convertir un
string en systime ?

Merci beaucoup pour l'aide !

Amicalement,
Alex

5 réponses

Avatar
Loïc Joly
Bonjour, j'essaye de trouver un équivalent de la fonction strptime
pour windows, mais après plusieurs heures de recherche dans les mans,
je ne la trouve pas !

Auriez vous une idée de ce que je pourrais utiliser pour convertir un
string en systime ?


Je ne connais pas strptime, mais pour des conversions de string vers une
durée, je me dirigerais vers boost::date_time.

--
Loïc

Avatar
Fabien LE LEZ
On 2 Apr 2007 10:35:14 -0700, :

Bonjour, j'essaye de trouver un équivalent de la fonction strptime
pour windows, mais après plusieurs heures de recherche dans les mans,


C'est logique, les "man pages" donnent généralement des informations
pour Linux et autres Unix.

Si tu veux des informations pour Windows, le forum adéquat est
fr.comp.os.ms-windows.programmation, et le site web de référence est
<http://msdn.microsoft.com>.

Avatar
Sylvain
wrote on 02/04/2007 19:35:
Bonjour, j'essaye de trouver un équivalent de la fonction strptime
pour windows, mais après plusieurs heures de recherche dans les mans,
je ne la trouve pas !


normal cela n'existe pas dans les CRT windows.
strptime est (en gros) un habillage de scanf pour lire différents champs
à stocker dans une référence unique
strptime(timeStr, fmt, &tm);
évitant le
sscanf(timeStr, fmt, [&year,] [&mnth,] [&days,] ...);

Auriez vous une idée de ce que je pourrais utiliser pour convertir un
string en systime ?


aucune solution via un CRT windows classique (ie MS) qui ne fournit
aucune fonction 'champ texte formatté' vers 'structure date/time'.

les MFC fournissent par contre quelque utilitaires dont la classe
COleDateTime qui dispose d'une méthode ParseDateTime - c'est la plus
proche de strptime, elle n'attends pas de descripteur de format mais
prétends tout deviner toute seule, résultat ça passe ou ça casse.

Sylvain.

Avatar
James Kanze
On Apr 2, 10:27 pm, Sylvain wrote:
wrote on 02/04/2007 19:35:

Bonjour, j'essaye de trouver un équivalent de la fonction strptime
pour windows, mais après plusieurs heures de recherche dans les mans,
je ne la trouve pas !


normal cela n'existe pas dans les CRT windows.
strptime est (en gros) un habillage de scanf pour lire différents champs
à stocker dans une référence unique
strptime(timeStr, fmt, &tm);
évitant le
sscanf(timeStr, fmt, [&year,] [&mnth,] [&days,] ...);


Pas vraiment un habillage, mais selon la même philosophie, oui.
Bien trop rigide pour les dates et les heures en provenence des
utilisateurs (mes utilisateurs, en tout cas).

Auriez vous une idée de ce que je pourrais utiliser pour convertir un
string en systime ?


aucune solution via un CRT windows classique (ie MS) qui ne fournit
aucune fonction 'champ texte formatté' vers 'structure date/time'.

les MFC fournissent par contre quelque utilitaires dont la classe
COleDateTime qui dispose d'une méthode ParseDateTime - c'est la plus
proche de strptime, elle n'attends pas de descripteur de format mais
prétends tout deviner toute seule, résultat ça passe ou ça casse.


D'après la doc, il y a quand même un paramètre qui permet de
spécifier la localisation de l'utilisateur (essentiel dans
l'interprétation des choses du genre 02/03/04, qui peut être le
2 mars, 2004, le 3 fév., 2004 ou le 4 mars, 2002, selon les
conventions -- en supposant que ce n'est pas une date à
l'époque de l'empire romaine).

D'après ce que je lis aussi, COleDateTime représente la date et
l'heure dans un flottant représentant le nombre de jours --
l'heure est donc dans la partie fractionnelle. Ce qui ne me
paraît pas un choix judicieux ; j'imagine qu'on pourrais
construire des cas où il y une erreur dans la date, suite à des
opérations. Je doute que de tels cas posent un problème pour la
plupart des applications, mais le fait qu'on ne peut pas
représenter une heure de façon exacte me semble genant quand
même. Donc, si je définit :
double const second = 1.0 / (24 * 3600) ;
ajouter une seconde 86400 fois à une date à minuit ne fait pas
changer la date, et donne bien un résultat différent que d'y
ajouter 86400 * second dans un coup. (Au moins sur Sparc ;
peut-être avec la précision étendue d'Intel, ce problème ne se
manifesterait pas d'une façon aussi flagrant.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Sylvain
James Kanze wrote on 03/04/2007 09:36:

D'après ce que je lis aussi, COleDateTime représente la date et
l'heure dans un flottant représentant le nombre de jours --
l'heure est donc dans la partie fractionnelle. Ce qui ne me


oui, le champ date/time est dans la donnée membre (publique) m_dt de
type 'DATE' (== double).

paraît pas un choix judicieux ; j'imagine qu'on pourrais
construire des cas où il y une erreur dans la date, suite à des
opérations. Je doute que de tels cas posent un problème pour la
plupart des applications, mais le fait qu'on ne peut pas
représenter une heure de façon exacte me semble genant quand
même.


il existe en effet des méthodes d'incrément de la heure, de l'heure, via
la classe COleDateTimeSpan, au dela des erreurs d'arrondis, elles sont
plutôt mal commodes et, heureusement, nullement indispensables.

pour traiter le cas décrit (transformation d'un champ texte en structure
temps), on préférera:

- parser le texte:
COleDateTime odt;
odt.ParseDateTime(timeStr [, LOCALE_NOUSEROVERRIDE]);
- convertir en SYSTEMTIME
SYSTEMTIME st;
odt.GetAsSystemTime(&st);
- réaliser toutes opérations avec ce SYSTEMTIME ou convertir (à la main)
en struct tm.

Sylvain.