J'ai une erreur lorsque j'essaye de mettre en forme des dates
ant=E9rieures =E0 1900 :
$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> dt_naissance =3D time.strptime('18960604', "%Y%m%d")
>>> str_naissance =3D time.strftime("'%Y-%m-%d %H:%M:%S'", dt_naissance)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year out of range
Auriez-vous une id=E9e sur la fa=E7on de contourner ce probl=E8me ?
D'avance merci.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
William Dode
On 10-08-2009, Emaging wrote:
Bonjour,
J'ai une erreur lorsque j'essaye de mettre en forme des dates antérieures à 1900 :
$ python Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year out of range
Auriez-vous une idée sur la façon de contourner ce problème ? D'avance merci.
Il faut utiliser le module datetime http://docs.python.org/library/datetime.html
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le module externe dateutil : http://labix.org/python-dateutil
bye
-- William Dodé - http://flibuste.net Informaticien Indépendant
On 10-08-2009, Emaging wrote:
Bonjour,
J'ai une erreur lorsque j'essaye de mettre en forme des dates
antérieures à 1900 :
$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
J'ai une erreur lorsque j'essaye de mettre en forme des dates antérieures à 1900 :
$ python Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas si tordu qua ça si ?
On 10 août, 12:32, William Dode <w...@flibuste.net> wrote:
Il faut utiliser le module datetimehttp://docs.python.org/library/datetim e.html
Ce n'est pas une mauvaise idée, mais comment ?
Mes essais me donnent un résultat qui n'est pas bien meilleur :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'strftime' requires a 'datetime.date' object but
received a 'str'
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le
module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas
si tordu qua ça si ?
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas si tordu qua ça si ?
Bruno Desthuilliers
Emaging a écrit :
Bonjour,
J'ai une erreur lorsque j'essaye de mettre en forme des dates antérieures à 1900 :
$ python Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year out of range
Auriez-vous une idée sur la façon de contourner ce problème ?
Même pb avec datetime.datetime, hélas. Cette limitation ne semble pas documenté dans le module time, je n'ai pas épluché la doc de datetime mais le message d'erreur était un poil plus explicite (sur le fait qu'il s'agisse bien d'une limitation).
Ceci étant, dans ton cas, c'est assez simple de faire ça "à la mano":
J'ai une erreur lorsque j'essaye de mettre en forme des dates
antérieures à 1900 :
$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year out of range
Auriez-vous une idée sur la façon de contourner ce problème ?
Même pb avec datetime.datetime, hélas. Cette limitation ne semble pas
documenté dans le module time, je n'ai pas épluché la doc de datetime
mais le message d'erreur était un poil plus explicite (sur le fait qu'il
s'agisse bien d'une limitation).
Ceci étant, dans ton cas, c'est assez simple de faire ça "à la mano":
J'ai une erreur lorsque j'essaye de mettre en forme des dates antérieures à 1900 :
$ python Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year out of range
Auriez-vous une idée sur la façon de contourner ce problème ?
Même pb avec datetime.datetime, hélas. Cette limitation ne semble pas documenté dans le module time, je n'ai pas épluché la doc de datetime mais le message d'erreur était un poil plus explicite (sur le fait qu'il s'agisse bien d'une limitation).
Ceci étant, dans ton cas, c'est assez simple de faire ça "à la mano":
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
Si tu lisais la doc de datetime ?-)
Mais bon, ça ne solutionnera pas ton problème, hélas (cf mon autre post dans ce thread).
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas si tordu qua ça si ?
Ce que tu veux transformer n'est pas une date mais une chaine.
Emaging a écrit :
On 10 août, 12:32, William Dode <w...@flibuste.net> wrote:
Il faut utiliser le module datetimehttp://docs.python.org/library/datetime.html
Ce n'est pas une mauvaise idée, mais comment ?
Mes essais me donnent un résultat qui n'est pas bien meilleur :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'strftime' requires a 'datetime.date' object but
received a 'str'
Si tu lisais la doc de datetime ?-)
Mais bon, ça ne solutionnera pas ton problème, hélas (cf mon autre post
dans ce thread).
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le
module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas
si tordu qua ça si ?
Ce que tu veux transformer n'est pas une date mais une chaine.
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
Si tu lisais la doc de datetime ?-)
Mais bon, ça ne solutionnera pas ton problème, hélas (cf mon autre post dans ce thread).
Et si tu as des trucs un peu plus tordus à faire avec les dates y a le module externe dateutil :http://labix.org/python-dateutil
Transfomer une date AAAAMMJJ en AAAA-MM-JJ hh:mm:ss ne me semble pas si tordu qua ça si ?
Ce que tu veux transformer n'est pas une date mais une chaine.
Emaging
On 10 août, 14:48, Bruno Desthuilliers <bruno. wrote:
Si tu lisais la doc de datetime ?-)
Tu penses bien que je ne me serais pas permis... ( rtfm :-)
Je t'accorde que mon deuxième post (copier/coller un peu rapide) n'était pas correct, il fallait lire :
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year96 is before 1900; the datetime strftime() methods require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et datetime (format, date) -> (date, format) (trop classe, ça aussi !)
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin (pour pouvoir calculer l'age entre autres). La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year=1896 is before 1900; the datetime strftime() methods
require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et
datetime (format, date) -> (date, format)
(trop classe, ça aussi !)
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui
merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin
(pour pouvoir calculer l'age entre autres).
La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year96 is before 1900; the datetime strftime() methods require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et datetime (format, date) -> (date, format) (trop classe, ça aussi !)
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin (pour pouvoir calculer l'age entre autres). La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Pourquoi pas plus simplement: str_naissance = dt_naissance.strftime("'%Y-%m-%d %H:%M:%S'")
datetime.strptime retourn un objet datetime, pas un simple struct / tuple / whatever.
ceci étant, vu que datetime.strftime s'appuie sur strfime, le résultat à ce stade est le même:
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year96 is before 1900; the datetime strftime() methods require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et datetime (format, date) -> (date, format) (trop classe, ça aussi !)
C'est parce que datetime.strftime est une méthode, pas une function. le premier argument d'une méthode est toujours l'instance sur laquelle on l'appelle - mais quand l'appel est fait normalement (c'est à dire sur l'instance), c'est python qui se charge d'insérer l'instance comme premier argument (nb: raccourci très raccourci d'un mécanisme plus complexe, mais à ce stade ça suffit comme explication - si t'en veux plus, tu me paie l'apéro !-)).
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin (pour pouvoir calculer l'age entre autres).
Alors lis *vraiment* la doc du module datetime. C'est précisément à ça que servent les objets date et datetime.
La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Bon, pour ce qui est du formatage, effectivement, c'est pas top. Regarde peut-être dateutils, sinon - puisque tu aura besoin de l'objet datetime pour les calculs, t'a plus qu'à garder sous le coude ta fonction de formattage (en plus datetime est codé en C et de telle façon qu'on ne puisse pas le monkeypatcher).
Emaging a écrit :
On 10 août, 14:48, Bruno Desthuilliers <bruno.
42.desthuilli...@websiteburo.invalid> wrote:
Si tu lisais la doc de datetime ?-)
Tu penses bien que je ne me serais pas permis... ( rtfm :-)
Ca m'aurait étonné, aussi !-)
Je t'accorde que mon deuxième post (copier/coller un peu rapide)
n'était pas correct, il fallait lire :
Pourquoi pas plus simplement:
str_naissance = dt_naissance.strftime("'%Y-%m-%d %H:%M:%S'")
datetime.strptime retourn un objet datetime, pas un simple struct /
tuple / whatever.
ceci étant, vu que datetime.strftime s'appuie sur strfime, le résultat à
ce stade est le même:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year96 is before 1900; the datetime strftime() methods
require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et
datetime (format, date) -> (date, format)
(trop classe, ça aussi !)
C'est parce que datetime.strftime est une méthode, pas une function. le
premier argument d'une méthode est toujours l'instance sur laquelle on
l'appelle - mais quand l'appel est fait normalement (c'est à dire sur
l'instance), c'est python qui se charge d'insérer l'instance comme
premier argument (nb: raccourci très raccourci d'un mécanisme plus
complexe, mais à ce stade ça suffit comme explication - si t'en veux
plus, tu me paie l'apéro !-)).
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui
merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin
(pour pouvoir calculer l'age entre autres).
Alors lis *vraiment* la doc du module datetime. C'est précisément à ça
que servent les objets date et datetime.
La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Bon, pour ce qui est du formatage, effectivement, c'est pas top. Regarde
peut-être dateutils, sinon - puisque tu aura besoin de l'objet datetime
pour les calculs, t'a plus qu'à garder sous le coude ta fonction de
formattage (en plus datetime est codé en C et de telle façon qu'on ne
puisse pas le monkeypatcher).
Pourquoi pas plus simplement: str_naissance = dt_naissance.strftime("'%Y-%m-%d %H:%M:%S'")
datetime.strptime retourn un objet datetime, pas un simple struct / tuple / whatever.
ceci étant, vu que datetime.strftime s'appuie sur strfime, le résultat à ce stade est le même:
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year96 is before 1900; the datetime strftime() methods require year >= 1900
C'est parce qu'il y a inversion des paramètres entre le module time et datetime (format, date) -> (date, format) (trop classe, ça aussi !)
C'est parce que datetime.strftime est une méthode, pas une function. le premier argument d'une méthode est toujours l'instance sur laquelle on l'appelle - mais quand l'appel est fait normalement (c'est à dire sur l'instance), c'est python qui se charge d'insérer l'instance comme premier argument (nb: raccourci très raccourci d'un mécanisme plus complexe, mais à ce stade ça suffit comme explication - si t'en veux plus, tu me paie l'apéro !-)).
Bon, il semblerait bien que ce soit la fonction strftime (C lib) qui merde et que la seule solution soit effectivement de l'oublier...
Ce que tu veux transformer n'est pas une date mais une chaine.
En fait, dans mon traitement, c'est bien une date dont j'ai besoin (pour pouvoir calculer l'age entre autres).
Alors lis *vraiment* la doc du module datetime. C'est précisément à ça que servent les objets date et datetime.
La soluce, que j'ai trouvé, c'est pas top, mais au moins ça passe :
Bon, pour ce qui est du formatage, effectivement, c'est pas top. Regarde peut-être dateutils, sinon - puisque tu aura besoin de l'objet datetime pour les calculs, t'a plus qu'à garder sous le coude ta fonction de formattage (en plus datetime est codé en C et de telle façon qu'on ne puisse pas le monkeypatcher).