4 Stimmen

Wie kann ich das Format eines Datums über die Befehlszeile ändern?

Wie lässt sich ein Datum am schnellsten in ein Format konvertieren, beispielsweise

2008-06-01

auf ein Datum in einem anderen Format, z. B.

So 1. Juni 2008

Der wichtige Teil ist eigentlich das "Sun", denn je nach dem Tagesnamen muss ich möglicherweise andere Dinge ändern - auf nicht-deterministische Weise. Ich benutze GNU bash, Version 3.2.17(1)-release (i386-apple-darwin9.0) .

[Hintergrund: Der Grund, warum ich es von der Kommandozeile aus machen möchte, ist, dass ich es eigentlich in einen TextMate-Befehl schreiben möchte... Das ist eine lästige Aufgabe, die ich ständig in TextMate erledigen muss.]

9voto

Brian L Punkte 10557
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30

Siehe man date für andere Formatoptionen.

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

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

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

Wie von einem anderen Poster unten erwähnt, wäre es ratsam, %u (numerischer Wochentag) statt %a zu verwenden, um Lokalisierungsprobleme zu vermeiden.

2voto

Lesen der Datum(1) manpage verraten 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.

0 Stimmen

Unter OS X hätten Sie das in der date(1) Manpage nicht gesehen.

0 Stimmen

0 Stimmen

Ernsthaft? Das Kommentarsystem verwendet ein anderes Markup als die Antworten?

1voto

Dycey Punkte 4401

Vielen Dank dafür, sgm. Nur damit ich darauf zurückkommen kann, um mich darauf zu beziehen -

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.

0voto

bdumitriu Punkte 1313
date -d yyyy-mm-dd

Wenn Sie mehr Kontrolle über die Formatierung haben möchten, können Sie sie auch wie folgt hinzufügen:

date -d yyyy-mm-dd +%a

um nur das Sun-Teil zu bekommen, das Sie haben wollen.

0 Stimmen

Tut mir leid - ich erhalte gerade einen Verwendungsfehler damit. Ich verwende GNU bash, Version 3.2.17(1)-release (i386-apple-darwin9.0)

0 Stimmen

Dies funktioniert auf meinem Debian-Rechner. Offensichtlich nicht auf Macs. Sorry.

0voto

Dycey Punkte 4401
date -d ... 

scheint nicht zu funktionieren, da ich einen Verwendungsfehler erhalte:

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 soweit das man geht, ist date -d 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X