strptime pour windows !

Le
actuados
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 ?

Merci beaucoup pour l'aide !

Amicalement,
Alex
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Loïc Joly
Le #305285
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

Fabien LE LEZ
Le #305282
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

Sylvain
Le #305241
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.

James Kanze
Le #305234
On Apr 2, 10:27 pm, 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,] ...);


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


Sylvain
Le #305233
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.

Publicité
Poster une réponse
Anonyme