Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertion de format d'écriture de date

8 réponses
Avatar
Jonathan ILIAS
Bonjour,

cela fait plusieurs fois que je rencontre le probl=E8me : j'ai besoin de=20
convertir le format d'une date.

Je pensais utiliser la commande "date" mais, sauf =E0 avoir mal lu la doc=
,=20
elle ne me permet pas de choisir :
- un format de date en entr=E9e, pour interpr=E9ter la date que je lui do=
nne
- un format de date en sortie, pour m'afficher la date dans le format=20
qui m'int=E9resse.

C'est le genre de truc tr=E8s pratique dans l'=E9criture de scripts ou=20
autres choses... J'imagine que =E7a doit exister mais je n'arrive pas =E0=
=20
mettre la main l=E0 dessus. Any idea ?
--=20
Jonathan ILIAS

8 réponses

Avatar
Yves Rutschle
On Mon, Nov 29, 2004 at 04:49:36PM +0100, Jonathan ILIAS wrote:
Je pensais utiliser la commande "date" mais, sauf à avoir mal lu la doc,
elle ne me permet pas de choisir :



Tu as mal lu la doc:

- un format de date en entrée, pour interpréter la date que je lui donne



option -d

- un format de date en sortie, pour m'afficher la date dans le format
qui m'intéresse.



option +"..."

Par exemple:

@oban]:yves$ date -d "12/25/2004" +"%a"
Sat

Noël est un samedi!

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jonathan ILIAS
Yves Rutschle a écrit :
Tu as mal lu la doc:


Si si. Enfin, en tout cas, ce n'est pas la solution que je cherche. Dans
la solution que tu proposes, je ne peux pas choisir le format de la date
d'entrée.

Par exemple, j'aimerai passer de 1103929200 (nombre de secondes depuis
1er janvier 1970) à 25/12/2004.

J'ai eu une idée, suite à ta réponse, mais date ne semble pas voulo ir de
cette syntaxe :
$ date -d "1101205039+%s" "+%D"
date: date invalide « 1101205039+%s »
$ date -d "1101205039 +%s" "+%D"
date: date invalide « 1101205039 +%s »

Par exemple:

@oban]:yves$ date -d "12/25/2004" +"%a"
Sat

Noël est un samedi!



(Remarque inutile) Je dirai même plus :
echo "Noël est un `LC_ALL=fr_FR date -d "12/25/2004" "+%A"`"

--
Jonathan ILIAS
Avatar
Frédéric Bothamy
* Jonathan ILIAS [2004-11-30 08:51] :
Yves Rutschle a écrit :
>Tu as mal lu la doc:
Si si. Enfin, en tout cas, ce n'est pas la solution que je cherche. Dans
la solution que tu proposes, je ne peux pas choisir le format de la date
d'entrée.

Par exemple, j'aimerai passer de 1103929200 (nombre de secondes depuis
1er janvier 1970) à 25/12/2004.



Si, si, c'est dans la doc (c'est le dernier exemple donné dans le
fichier .info) :

To convert such an unwieldy number of seconds back to a more
readable form, use a command like this:

date -d '1970-01-01 946684800 sec' +"%Y-%m-%d %T %z"
2000-01-01 00:00:00 +0000

Cependant :

date -d '1970-01-01 1103929200 sec' +"%Y-%m-%d %T %z"
2004-12-24 23:00:00 +0100

Le bon nombre de secondes est plutôt :

date -d '1970-01-01 1103932800 sec' +"%Y-%m-%d %T %z"
2004-12-25 00:00:00 +0100


Fred

--
Comment poser les questions de manière intelligente ?
http://www.gnurou.org/documents/smart-questions-fr.html
Comment signaler efficacement un bug ?
http://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jonathan ILIAS
FrédéricBothamy a écrit :
Si, si, c'est dans la doc (c'est le dernier exemple donné dans le
fichier .info) :

To convert such an unwieldy number of seconds back to a more
readable form, use a command like this:

date -d '1970-01-01 946684800 sec' +"%Y-%m-%d %T %z"
2000-01-01 00:00:00 +0000

Cependant :

date -d '1970-01-01 1103929200 sec' +"%Y-%m-%d %T %z"
2004-12-24 23:00:00 +0100

Le bon nombre de secondes est plutôt :

date -d '1970-01-01 1103932800 sec' +"%Y-%m-%d %T %z"
2004-12-25 00:00:00 +0100



Ah, en effet, j'avais mal lu la doc ;-)

Du coup, j'ai approfondi un peu, et j'ai trouvé une piste pour mon
premier problème (conversion des dates dans le fichier de bookmark de
Mozilla) :
info --node="Date input formats" --file=coreutils.info.gz

En fait, je voulais obtenir la liste de tous les mardi d'une année.
J'arrive actuellement la chose de façon relative à la date courante :
$ date -d "1 Tuesday"
mar nov 30 00:00:00 CET 2004
$ date -d "2 Tuesday"
mar déc 7 00:00:00 CET 2004

Même si je peux m'en sortir manuellement, difficile de faire un script
qui me sorte tous les mardi pour l'année 2005.

Il y a peut-être une solution qui m'échappe encore...

--
Jonathan ILIAS
Avatar
Yves Rutschle
On Tue, Nov 30, 2004 at 11:10:07AM +0100, Jonathan ILIAS wrote:
Même si je peux m'en sortir manuellement, difficile de faire un script
qui me sorte tous les mardi pour l'année 2005.



Solution sale à retravailler:
for i in `seq 1 12`; do cal $i 2004 ; done | cut -b7-8

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jonathan ILIAS
Yves Rutschle a écrit :
Solution sale à retravailler:
for i in `seq 1 12`; do cal $i 2004 ; done | cut -b7-8



Soit, il existe de nombreuses façons d'obenir une solution à un probl ème
spécifique, moyennant a pire une légère intervention manuelle.

L'objet de ma question initiale était de savoir s'il existait un outil
"générique" permettant de faire des conversions de format d'écritur e de
date. Pour mes deux problèmes présentés précédemment, la soluti on aurait
alors été assez simple.

Si ça n'existe pas, je prendrai le temps d'entamer le développement d 'un
tel outil, avec le patrimoine de code que nous offre le logiciel libre,
cela devrait se limiter à intégrer quelques bouts de code... Mais je ne
voudrais pas réinventer la roue.


PS : je ne voudrais pas paraître ingrat, merci tout de même à vous qui
vous intéressez à mon problème :)

--
Jonathan ILIAS
Avatar
Frédéric Bothamy
* Yves Rutschle [2004-11-30 11:26] :
On Tue, Nov 30, 2004 at 11:10:07AM +0100, Jonathan ILIAS wrote:
> Même si je peux m'en sortir manuellement, difficile de faire un script
> qui me sorte tous les mardi pour l'année 2005.

Solution sale à retravailler:
for i in `seq 1 12`; do cal $i 2004 ; done | cut -b7-8



Hop :

for i in `seq 0 51`; do date --date="4 Jan 2005 +$i weeks"; done

(ou on peut faire simplement cal 2005 pour avoir le calendrier complet
pour 2005).


Fred

--
Comment poser les questions de manière intelligente ?
http://www.gnurou.org/documents/smart-questions-fr.html
Comment signaler efficacement un bug ?
http://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jonathan ILIAS
FrédéricBothamy a écrit :
Solution sale à retravailler:
for i in `seq 1 12`; do cal $i 2004 ; done | cut -b7-8




Hop :

for i in `seq 0 51`; do date --date="4 Jan 2005 +$i weeks"; done

(ou on peut faire simplement cal 2005 pour avoir le calendrier complet
pour 2005).



Voilà une belle conclusion à ce fil de discussion :)

--
Jonathan ILIAS, qui, en plus d'admirer la créativité de Frédéric et de
Yves, a pris connaissance d'une commande bien pratique : "seq"