7
votes

C bibliothèque pour l'analyse de la date d'analyse

est au courant d'une fonction d'analyse de date pour c. Je cherche quelque chose comme: xxx

merci


1 commentaires

Comme mentionné par BLAK3R dans un commentaire, votre spécification est ambiguë. Dans le premier exemple, la date peut être analysée le 10 septembre ou le 9 octobre, selon le pays dans lequel vous vous trouvez. Vous devez spécifier un format.


9 Réponses :


3
votes

Malheureusement, la seule chose dans la bibliothèque standard est getDate ( ) , défini par POSIX, pas la norme C. Il gérera de nombreux formats de temps, mais vous devez connaître le format à l'avance - pas seulement passer une chaîne générique à la fonction.

Il n'est pas également pris en charge sur Visual C ++, si c'est un problème pour vous. Le runtime GNU C prend en charge cette routine.


1 commentaires

Y a-t-il quelque chose qui n'est pas dans la norme et portable?



2
votes

the Bibliothèque Julian fait une grande partie de ce que vous demandez - Voir notamment comment son analyse fonctionne. Cependant, je ne pense pas que cela s'étire tout à fait jusqu'à vos besoins (que lundi , je crois, je le jetterais pour une rotation; -).


0 commentaires

0
votes

dans le temps.h Vous avez plus de temps: xxx

qui fait l'opposé de xxx

Cliquez ici pour la référence complète sur Wikipedia


3 commentaires

Et si je ne connais pas le format?


@adk hmm ... Eh bien, vous devez donner des instructions afin de savoir si vous le nourrissez un mois contre un jour ou une année ... vous savez? Mais vous pouvez pour une chaîne d'entrée donnée, essayez de l'analyser avec plusieurs formats et continuez à l'essayer jusqu'à ce que la fonction ne renvoie pas NULL.


@Mitch Blé - Dunno À propos de VC ++ Avez-vous vérifié CURE?



12
votes

Il y a deux approches assez courantes en C:

  1. Utilisez Strptime () avec une gamme de formats pris en charge que vous acceptez.

  2. Bang Tête contre la table beaucoup, puis abandonnez ou utilisez une autre langue qui a déjà une bibliothèque utilisable (comme Perl ou Python).


0 commentaires

2
votes

git a un portable Date d'analyse de la bibliothèque , libérée sous GPLV2 . Vous pourriez être capable d'utiliser cela. Je pense que vous voulez approximatate_careful () .


0 commentaires

5
votes

Si le format est cohérent, vous pouvez utiliser scanf fonctions de la famille xxx


0 commentaires

1
votes

Je suis un peu en retard à la fête, mais nous construisons sur ce que Mark Lodato posté, j'ai jeté ceci ensemble: Git Envoi d'approximation sous forme de bibliothèque . Testé sur Linux / Mac.


0 commentaires

0
votes

dans Windows, il y a Vardatefromstr qui peut automatiquement analyser de nombreux formats s'il est utilisé comme celui-ci:

LPCWSTR dateString = L"
DATE result;
HRESULT hr = ::VarDateFromStr(dateString,
                              LOCALE_ALL,
                              0,
                              &result);

if (FAILED(hr))
{
    /* handle error */
    /* DISP_E_TYPEMISMATCH means that it didn't recognize the format. */
}


0 commentaires

0
votes

Le NotMuch Mail Project a un analyseur GPLV2 + pour les chaînes de date. Il prend en charge des dates absolues et relatives dans divers formats conviviaux, bien que les dates relatives ne font référence que sur le passé. Le code est dans le Subdirectory String-Time-String of the Notmuch Arbre source .


2 commentaires

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses uniquement uniquement peuvent devenir invalides si la page liée change. - de l'avis


@ DJHASKIN987 a légèrement amélioré la réponse, mais il n'y a pas beaucoup d'informations essentielles qui pourraient être ajoutées au-delà de la source définitive du code. Comment est-ce que c'est peut-être pire que les deux réponses upvotes pointées sur l'analyseur de date de GIT?