Frage

Was ist der Schnellste Weg, um zu konvertieren ein Datum in einem format, sagen

2008-06-01

um ein Datum in einem anderen format, sagen

Sonne-1. Juni 2008

Der wichtige Teil ist wirklich der 'Sun', weil je nach der dayname, vielleicht brauche ich mal andere Dinge um sich herum - in eine nicht-deterministische Weise.Ich verwende GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0).

[Hintergrund:Der Grund, dass ich möchte es von der Befehlszeile aus, dass das, was ich wirklich will, ist zu schreiben, es in ein TextMate-Befehl...Es ist eine lästige Aufgabe, die ich zu tun habe die ganze Zeit in textMate.]

War es hilfreich?

Lösung

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

Siehe man date für andere Formatoptionen.

Diese Option ist verfügbar unter Linux, aber nicht auf Darwin. In Darwin, können Sie die folgende Syntax verwenden statt:

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

Das -f Argument gibt das Eingabeformat und das + Argument gibt das Ausgabeformat.

Wie unten von einem anderen Poster erwähnt, würden Sie klug sein% zu verwenden u (numerischer Tag der Woche), anstatt% eines Lokalisierungsproblem zu vermeiden.

Andere Tipps

Lesen Sie die date (1) manpage enthüllt hätte:

-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.

Vielen Dank für die SGM. Also nur so kann ich wieder darauf verweisen -

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

Danke.

date -d yyyy-mm-dd

Wenn Sie mehr Kontrolle über die Formatierung möchten, können Sie diese auch wie folgt hinzu:

date -d yyyy-mm-dd +%a

bekommen nur die Sonne Teil, das Sie sagen, Sie wollen.

date -d ... 

nicht scheinen, es zu schneiden, wie bekomme ich einen Syntax-Fehler:

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

Ich verwende GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0), und wie weit, wie es dem Mann geht, date-d ist nur für

-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.

Wenn Sie gerade suchen den Tag der Woche zu bekommen, versuchen Sie nicht, Strings zu entsprechen. Das bricht, wenn die locale ändert. Das %u Format geben Sie die Tageszahl:

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

Und in der Tat, das war ein Donnerstag. Man könnte diese Zahl auf Index in ein Array verwenden Sie in Ihrem Programm haben, oder verwenden Sie einfach die Nummer selbst.

Sehen Sie Datum und strftime Mann Seiten für weitere Details. Das Datum manpage auf O X ist die falsche, obwohl, da es diese Optionen nicht auflisten, die funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top