|> On Fri, 16 Jan 2004 08:22:49 +0100, "Didier" wrote:
|> >comment peut on contrôler si une date est valide ?
|> mktime() ?
Rend valide la date. Même si elle ne l'était pas. C-à-d que si tu donnes comme date 30/2/2004, il la convertit en 1/3/2004. L'intérêt, c'est que si tu as une date, et tu en veux une autre trois jours plus tard, tu fais tm_day += 3, puis mktime, et ça y est.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ <gramster@gramster.com> writes:
|> On Fri, 16 Jan 2004 08:22:49 +0100, "Didier" <toto@wanadoo.fr> wrote:
|> >comment peut on contrôler si une date est valide ?
|> mktime() ?
Rend valide la date. Même si elle ne l'était pas. C-à-d que si
tu donnes comme date 30/2/2004, il la convertit en 1/3/2004.
L'intérêt, c'est que si tu as une date, et tu en veux une autre
trois jours plus tard, tu fais tm_day += 3, puis mktime, et ça y est.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> On Fri, 16 Jan 2004 08:22:49 +0100, "Didier" wrote:
|> >comment peut on contrôler si une date est valide ?
|> mktime() ?
Rend valide la date. Même si elle ne l'était pas. C-à-d que si tu donnes comme date 30/2/2004, il la convertit en 1/3/2004. L'intérêt, c'est que si tu as une date, et tu en veux une autre trois jours plus tard, tu fais tm_day += 3, puis mktime, et ça y est.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ
On 17 Jan 2004 11:48:35 +0100, James Kanze wrote:
|> mktime() ?
Rend valide la date.
S'il y arrive. Et si mktime() ne renvoie pas une erreur, on peut comparer avec la date de départ -- si c'est la même, c'est qu'elle était valide.
|> On 17 Jan 2004 11:48:35 +0100, James Kanze wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t. Et qu'il y a donc un comportement indéfini.
|> Et si mktime() ne renvoie pas une erreur, on peut comparer avec la |> date de départ -- si c'est la même, c'est qu'elle était |> valide.
En voilà une astuce. Je n'y aurais pas pensé. C'est un peu overkill, mais vu que la fonction mktime est déjà écrite, pourquoi pas en profiter.
Très bonne idée.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ <gramster@gramster.com> writes:
|> On 17 Jan 2004 11:48:35 +0100, James Kanze <kanze@gabi-soft.fr> wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur
un time_t. Et qu'il y a donc un comportement indéfini.
|> Et si mktime() ne renvoie pas une erreur, on peut comparer avec la
|> date de départ -- si c'est la même, c'est qu'elle était
|> valide.
En voilà une astuce. Je n'y aurais pas pensé. C'est un peu
overkill, mais vu que la fonction mktime est déjà écrite,
pourquoi pas en profiter.
Très bonne idée.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> On 17 Jan 2004 11:48:35 +0100, James Kanze wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t. Et qu'il y a donc un comportement indéfini.
|> Et si mktime() ne renvoie pas une erreur, on peut comparer avec la |> date de départ -- si c'est la même, c'est qu'elle était |> valide.
En voilà une astuce. Je n'y aurais pas pensé. C'est un peu overkill, mais vu que la fonction mktime est déjà écrite, pourquoi pas en profiter.
Très bonne idée.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ
On 17 Jan 2004 13:51:16 +0100, James Kanze wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par exemple, tm_year%0) tout en restant tout à fait légal sur le plan C++ ; seul mktime() détectera que la valeur est impossible, et renverra donc une erreur.
On 17 Jan 2004 13:51:16 +0100, James Kanze <kanze@gabi-soft.fr> wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur
un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par
exemple, tm_year%0) tout en restant tout à fait légal sur le plan
C++ ; seul mktime() détectera que la valeur est impossible, et
renverra donc une erreur.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par exemple, tm_year%0) tout en restant tout à fait légal sur le plan C++ ; seul mktime() détectera que la valeur est impossible, et renverra donc une erreur.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par exemple, tm_year%0) tout en restant tout à fait légal sur le plan C++ ; seul mktime() détectera que la valeur est impossible, et renverra donc une erreur.
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de
news:t1ei0017ut5u3p7f8q7uluumqp4ir70a3m@4ax.com...
On 17 Jan 2004 13:51:16 +0100, James Kanze <kanze@gabi-soft.fr> wrote:
|> >|> mktime() ?
|> >Rend valide la date.
|> S'il y arrive.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur
un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par
exemple, tm_year%0) tout en restant tout à fait légal sur le plan
C++ ; seul mktime() détectera que la valeur est impossible, et
renverra donc une erreur.
Et s'il n'y arrive pas, c'est que la date n'est pas représentable sur un time_t.
OK.
Et qu'il y a donc un comportement indéfini.
Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par exemple, tm_year%0) tout en restant tout à fait légal sur le plan C++ ; seul mktime() détectera que la valeur est impossible, et renverra donc une erreur.
|> On 17 Jan 2004 13:51:16 +0100, James Kanze wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas |> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par |> exemple, tm_year%0) tout en restant tout à fait légal sur le |> plan C++ ; seul mktime() détectera que la valeur est impossible, |> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à une fonction standard un paramètre hors du domaine prévu, ou qu'il y a un débordement arithmétique, il y a un comportement indéfini. mktime, en revance, fait exception ; selon la norme « If the calendar time cannot be represented, the function returns the value of (time_t)(-1). »
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ <gramster@gramster.com> writes:
|> On 17 Jan 2004 13:51:16 +0100, James Kanze <kanze@gabi-soft.fr> wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas
|> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par
|> exemple, tm_year%0) tout en restant tout à fait légal sur le
|> plan C++ ; seul mktime() détectera que la valeur est impossible,
|> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à
une fonction standard un paramètre hors du domaine prévu, ou qu'il
y a un débordement arithmétique, il y a un comportement
indéfini. mktime, en revance, fait exception ; selon la norme « If
the calendar time cannot be represented, the function returns the value
of (time_t)(-1). »
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> On 17 Jan 2004 13:51:16 +0100, James Kanze wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas |> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par |> exemple, tm_year%0) tout en restant tout à fait légal sur le |> plan C++ ; seul mktime() détectera que la valeur est impossible, |> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à une fonction standard un paramètre hors du domaine prévu, ou qu'il y a un débordement arithmétique, il y a un comportement indéfini. mktime, en revance, fait exception ; selon la norme « If the calendar time cannot be represented, the function returns the value of (time_t)(-1). »
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Didier
mktime adapte la date pour quelle soit valide, il est rare qu'il ne puisse pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème. Le but n'est pas de crèer une autre date, mais de dire quelle n'est pas valide et mktime ne le fait pas dans tout les cas. Pour savoir si une date est valide il faut trouver une autre solution. Laquelle ?
"James Kanze" a écrit dans le message de news:
Fabien LE LEZ writes:
|> On 17 Jan 2004 13:51:16 +0100, James Kanze wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas |> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par |> exemple, tm_year%0) tout en restant tout à fait légal sur le |> plan C++ ; seul mktime() détectera que la valeur est impossible, |> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à une fonction standard un paramètre hors du domaine prévu, ou qu'il y a un débordement arithmétique, il y a un comportement indéfini. mktime, en revance, fait exception ; selon la norme « If the calendar time cannot be represented, the function returns the value of (time_t)(-1). »
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
mktime adapte la date pour quelle soit valide, il est rare qu'il ne puisse
pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème.
Le but n'est pas de crèer une autre date, mais de dire quelle n'est pas
valide
et mktime ne le fait pas dans tout les cas.
Pour savoir si une date est valide il faut trouver une autre solution.
Laquelle ?
"James Kanze" <kanze@gabi-soft.fr> a écrit dans le message de
news:861xpxqrej.fsf@alex.gabi-soft.fr...
Fabien LE LEZ <gramster@gramster.com> writes:
|> On 17 Jan 2004 13:51:16 +0100, James Kanze <kanze@gabi-soft.fr> wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas
|> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par
|> exemple, tm_year%0) tout en restant tout à fait légal sur le
|> plan C++ ; seul mktime() détectera que la valeur est impossible,
|> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à
une fonction standard un paramètre hors du domaine prévu, ou qu'il
y a un débordement arithmétique, il y a un comportement
indéfini. mktime, en revance, fait exception ; selon la norme « If
the calendar time cannot be represented, the function returns the value
of (time_t)(-1). »
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
mktime adapte la date pour quelle soit valide, il est rare qu'il ne puisse pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème. Le but n'est pas de crèer une autre date, mais de dire quelle n'est pas valide et mktime ne le fait pas dans tout les cas. Pour savoir si une date est valide il faut trouver une autre solution. Laquelle ?
"James Kanze" a écrit dans le message de news:
Fabien LE LEZ writes:
|> On 17 Jan 2004 13:51:16 +0100, James Kanze wrote:
|> >|> >|> mktime() ?
|> >|> >Rend valide la date.
|> >|> S'il y arrive.
|> >Et s'il n'y arrive pas, c'est que la date n'est pas |> >représentable sur un time_t.
|> OK.
|> >Et qu'il y a donc un comportement indéfini.
|> Pourquoi ? L'objet "tm" peut contenir des valeurs fantaisistes (par |> exemple, tm_year%0) tout en restant tout à fait légal sur le |> plan C++ ; seul mktime() détectera que la valeur est impossible, |> et renverra donc une erreur.
En effet. Je me suis trompé. En général, quand tu passes à une fonction standard un paramètre hors du domaine prévu, ou qu'il y a un débordement arithmétique, il y a un comportement indéfini. mktime, en revance, fait exception ; selon la norme « If the calendar time cannot be represented, the function returns the value of (time_t)(-1). »
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Fabien LE LEZ
On Mon, 19 Jan 2004 22:57:03 +0100, "Didier" wrote:
Laquelle ?
1/ Commence par écrire dans le bon sens ; cf <http://www.giromini.org/usenet-fr/repondre.html>. 2/ Lis attentivement le présent thread.
mktime adapte la date pour quelle soit valide, il est rare qu'il ne puisse pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème. Le but n'est pas de crèer une autre date, mais de dire quelle n'est pas valide et mktime ne le fait pas dans tout les cas. Pour savoir si une date est valide il faut trouver une autre solution. Laquelle ?
Comme a dit Fabien : tu fais une copie du tm initial, et tu compares les champs du résultat de mktime. Si mktime n'a rien changé, c'est que la date initiale était valide. S'il a changé quelque chose, c'est qu'elle n'était pas valide.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Didier" <toto@wanadoo.fr> wrote in message
news:<buhjri$tlp$1@news-reader1.wanadoo.fr>...
mktime adapte la date pour quelle soit valide, il est rare qu'il ne
puisse pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème. Le but n'est
pas de crèer une autre date, mais de dire quelle n'est pas valide et
mktime ne le fait pas dans tout les cas. Pour savoir si une date est
valide il faut trouver une autre solution. Laquelle ?
Comme a dit Fabien : tu fais une copie du tm initial, et tu compares les
champs du résultat de mktime. Si mktime n'a rien changé, c'est que la
date initiale était valide. S'il a changé quelque chose, c'est qu'elle
n'était pas valide.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
mktime adapte la date pour quelle soit valide, il est rare qu'il ne puisse pas le faire.
Si tu donnes la date 35/15/2004 ça marche sans problème. Le but n'est pas de crèer une autre date, mais de dire quelle n'est pas valide et mktime ne le fait pas dans tout les cas. Pour savoir si une date est valide il faut trouver une autre solution. Laquelle ?
Comme a dit Fabien : tu fais une copie du tm initial, et tu compares les champs du résultat de mktime. Si mktime n'a rien changé, c'est que la date initiale était valide. S'il a changé quelque chose, c'est qu'elle n'était pas valide.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16