9
votes

Cochez C ++ si une date est valide

Y a-t-il une fonction pour vérifier si une date donnée est valide ou non? Je ne veux rien écrire de zéro.

E.g. 32/10/2012 n'est pas valide et 10/10/2010 est valide


2 commentaires

Où est-ce que cette valeur est originaire? Qu'est-ce qui est fait avec ça?


C'est l'entrée. Je veux juste vérifier si c'est valide ou non.


3 Réponses :


8
votes

Si votre chaîne est toujours dans ce format, la chose la plus facile à faire serait de diviser la chaîne en trois composants, peuplez une structure TM et transmettez-la sur mktime () . S'il renvoie -1, il n'est pas une date valide.

Vous pouvez également utiliser boost.date_time pour analyser: xxx


3 commentaires

Quel svp et analyseur sont?


mktime normalisera une date. Par exemple, si la journée est négative, elle enveloppera le mois précédent et ajustera les membres de la journée et du mois en conséquence.


mktime : Les valeurs dans le temps sont autorisées à être à l'extérieur leurs gammes normales



4
votes

La classe d'heure de réussite devrait pouvoir gérer ce dont vous avez besoin. Voir http://www.boost.org/doc/libs/ Libération / doc / html / date_time.html


3 commentaires

Ou la version actuelle, boost.org/doc/libs/1_48_0 /doc/html/date_time.html


Ahh. Oui, laissez-moi éditer mon post pour refléter cela. Merci Fred.


Ou ce que je suis sûr, c'est le lien de version actuel. :) Merci Vlad.



3
votes

Si le format de la date est constant et que vous ne souhaitez pas utiliser Boost, vous pouvez toujours utiliser STRPTIME code>, défini dans l'en-tête CTINE CODE>:

const char date1[] = "32/10/2012";
const char date2[] = "10/10/2012";
struct tm tm;

if (!strptime(date1, "%d/%m/%Y", &tm)) std::cout << "date1 isn't valid\n";
if (!strptime(date2, "%d/%m/%Y", &tm)) std::cout << "date2 isn't valid\n";


2 commentaires

Portez à l'esprit STRATTIME () est une extension non standard qui n'est pas disponible sur tous les systèmes (y compris Windows).


@Spencercw: En effet. Toutefois, il existe des implémentations open source pour la plupart des systèmes, y compris Windows. En outre, c'est une norme de POSIX. :)