2008-11-10 9 views
4

Quel est le meilleur moyen de convertir une date dans un format, disentComment puis-je modifier le format d'une date à partir de la ligne de commande?

2008-06-01

à une date dans un autre format, disent

Sun 1st June 2008

Le bit important est en fait le 'Sun' parce que selon la dayname, il se peut que je doive manipuler d'autres choses - de façon non déterministe. Je cours GNU bash, version 3.2.17 (1) -release (i386-apple-darwin9.0). Contexte: La raison pour laquelle je veux le faire depuis la ligne de commande, c'est que ce que je veux vraiment, c'est l'écrire dans une commande TextMate ... C'est une tâche ennuyante que je dois faire tout le temps dans textMate .]

Répondre

8
$ date -d '2005-06-30' +'%a %F' 
Thu 2005-06-30 

Voir man date pour les autres options de format.

Cette option est disponible sur Linux, mais pas sur Darwin. Dans Darwin, vous pouvez utiliser la syntaxe suivante à la place:

date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F" 

L'argument -f spécifie le format d'entrée et le + argument spécifie le format de sortie.

Comme le montre une autre affiche ci-dessous, il serait judicieux d'utiliser% u (jour numérique de la semaine) plutôt que% a pour éviter les problèmes de localisation.

0
date -d yyyy-mm-dd 

Si vous voulez plus de contrôle sur la mise en forme, vous pouvez également l'ajouter comme ceci:

date -d yyyy-mm-dd +%a 

juste obtenir la partie Sun que vous dites que vous voulez.

+0

Désolé - J'ai juste une erreur d'utilisation avec ça. Exécution de GNU bash, version 3.2.17 (1) -release (i386-apple-darwin9.0) – Dycey

+0

Cela fonctionne sur ma machine Debian. Apparemment, pas si sur Mac. Pardon. – bdumitriu

0
date -d ... 

ne semble pas le couper, comme je l'obtiens une erreur d'utilisation:

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
      [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] 

Je suis en bash GNU, la version 3.2.17 (1) -release (i386-Apple- darwin9.0), et pour autant que l'homme va, -d date est juste pour

-d dst Set the kernel's value for daylight saving time. If dst is non- 
     zero, future calls to gettimeofday(2) will return a non-zero for 
     tz_dsttime. 
1

lecture de la date (1) manpage aurait révélé:

-j Do not try to set the date. This allows you to use the -f flag 
    in addition to the + option to convert one date format to another.
+0

En fait, sur OS X, vous ne l'auriez pas vu dans la page de manuel date (1). –

+0

[Apple a un problème, alors.] (Http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/date.1.html) –

+0

Sérieusement? Le système de commentaire utilise un balisage différent des réponses? –

1

Merci pour ce SGM. Donc juste pour que je puisse revenir à s'y référer -

date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y" 
      ^   ^ ^
      parse using  |  output using 
      this format  |  this format 
          | 
         date expressed in 
         parsing format 

Thu 3 Jan 2008 

Merci.

0

Si vous recherchez simplement le jour de la semaine, n'essayez pas de faire correspondre les chaînes. Cela casse lorsque les paramètres régionaux changent. Le format %u vous donner le numéro du jour:

$ date -j -f "%Y-%m-%d" "2008-01-03" +"%u" 
4 

Et en effet, qui était un jeudi. Vous pouvez utiliser ce numéro pour indexer dans un tableau que vous avez dans votre programme, ou simplement utiliser le numéro lui-même.

Voir les pages de manuel date et strftime pour plus de détails. La page de manuel de date sur OS X est la mauvaise, car elle ne liste pas ces options qui fonctionnent.

Questions connexes