OSX bash - date

marvin

Mitglied
Thread Starter
Dabei seit
09.12.2003
Beiträge
52
Reaktionspunkte
0
Hallo,

kann mir jemand sagen wie ich unter der OSX Bash via "date" das Datum - (minus) einen Tag bekomme?

Gruss
Sven
 
Original geschrieben von marvin
Hallo,

kann mir jemand sagen wie ich unter der OSX Bash via "date" das Datum - (minus) einen Tag bekomme?

Gruss
Sven
 

Bloed wenn ich jetzt selber als Erster schreibe, aber ich muss dazu sagen, dass ich eigentlich eine allgemeine BASH LOESUNG suche!

Nochmal Gruss
Sven

PS: Dass Shell <> Shell ist weiss ich. Ich dachte aber Bash = Bash.?.
 
"man date" hilft da weiter ;)

"The command:

date 8506131627

sets the date to ``June 13, 1985, 4:27 PM''."
 
Danke fuer die Nachricht, aber das wollte ich nicht.

Mir geht es um die Ausgabe des Datums von Gestern auf der bash.


Gruss
Sven
 
Also in der Linux bash geht das so:

date --date "one day ago"

Ich denke die Mac Bash ist dem ähnlich.

Wenn du das ganze noch formatiert haben willst kannst du wie gewohnt einen Formatstring anhängen:

date --date "one day ago" +%Y-%m-%d
 
...

Hallo marvin,

env TZ=CEST+22 date

bzw. nur das Datum

env TZ=CEST+22 date "+%d/%m/%y"

ergibt das Datum von Gestern. Irgendwie verstehe ich aber nicht, wie die 22 Stunden zustande kommen. Eigentlich müssten es doch 24 sein - oder?

Zu beachten ist, dass das nun für die Sommerzeit gilt.

Noch nicht das Richtige, aber ich hoffe mal ich schubs Dich in die richtige Richtung...
So einfach wie unter Linux scheint es nicht zu sein.

Gruß Andi
 
Nebenbei mal einige Erklärungen:

Mit der bash hat das eigentlich nichts zu tun, da 'date' kein "Buitin" Kommando sondern ein eigenständiges Programm ist.

Dass 'date' unter Linux i.d.R. anders funktioniert liegt daran, dass unter Linux oft GNU Programme installiert sind, die nicht der SUSv3 entsprechen und häufig eine andere Syntax und einen anderen Funktionsumfang haben.

Andi schrieb:
...
ergibt das Datum von Gestern. Irgendwie verstehe ich aber nicht, wie die 22 Stunden zustande kommen. Eigentlich müssten es doch 24 sein - oder?
...i
Code:
env TZ=+22 date                            410
Mo Sep 18 17:56:36 UTC 2006

env TZ=CEST+22 date                            411 
So Sep 17 19:58:09 CEST 2006

env TZ=XYZ+22 date                             412 
So Sep 17 19:58:38 XYZ 2006
Nicht, dass ich es verstehen würde, aber so ist es ;).
Wie bist Du auf das Kommando gekommen? In der Form kannte ich das noch nicht.
 
Ach so, und hier noch mein Lösungsansatz:
Code:
date -r `perl -e 'print time-60*60*24,"\n"'`

Der funktioniert an allen Tagen, außer den zweien im Jahr, an denen die Sommerzeit umgestellt wird, da an diesen Tagen der Tag nicht 24 sondern 23 bzw. 25 Stunden hat.
 
...

Hallo maceis,

Wie bist Du auf das Kommando gekommen? In der Form kannte ich das noch nicht.

man date

ENVIRONMENT VARIABLES
The following environment variables affect the execution of date :

TZ The timezone to use when displaying dates. See environ(7) for more
information.

man environ

...the command ``env TZ=US/Pacific date'' displays the cur-
rent time in California.

Hmm und da dachte ich mir, wenn hier Heute ist, ist wo anders Gestern...
Dann erinnerte ich mich an GMT+1 usw. und habe CEST-24 versucht, was das Datum von Morgen lieferte. Dann hab ich noch CEST+24 versucht und bemerkt, dass die Zeit nicht stimmt. So kam ich auf die +22

Wobei ich mir jetzt schon den 2 Stunden Unterschied erklären kann da CET=UTC/GMT+1 ist und CEST eben 2h von UTC/GMT abweicht, wegen der Sommerzeit.

Eventuell müsste man anstatt CEST, GMT+2 einrichten und dann rechnet das System auch mit den 24h wobei ich es immer noch nicht richtig (+/-)?verstehe...

Das Sommer-/Winterzeitproblem besteht ja bei Deiner Perl-Lösung auch, falls der Befehl zur Falschen Zeit ausgeführt wird. Eben genau dann, wenn die Zeit umgestellt wird.

Gruß Andi
 
Andi schrieb:
...
Das Sommer-/Winterzeitproblem besteht ja bei Deiner Perl-Lösung auch, falls der Befehl zur Falschen Zeit ausgeführt wird. Eben genau dann, wenn die Zeit umgestellt wird.
Der Vorteil der Perl Lösung besteht darin, dass das Komando immer gleich bleibt und nur an zwei Tagen im Jahr (genau gesagt innerhalb von zwei Stunden im Jahr) das falsche Ergebnis liefert.
Und selbst das lässt sich lösen. ich wollte es marvin aber nicht vorenthalten, sich selbst an der perfekten Kommandozeile zu versuchen ;).
 
...

Hallo maceis,

env TZ=CET+23CEST+22,M3.5.0/2:00,M10.5.0/3:00 date

mit Geduld und Spucke ;)

Beginn der Sommerzeit am letzten (5) Sonntag (0) im März (M3) um 2:00 Uhr
Ende am letzten (5) Sonntag (0) im Oktober (M10) um 3:00

Gruß Andi
 
Nicht schlecht!

Funktioniert das auch 2007, wo sowohl März als auch Oktober nur 4 Sonntage haben?
 
...

Hallo maceis,

Funktioniert das auch 2007, wo sowohl März als auch Oktober nur 4 Sonntage haben?

Soweit ich das durch Datum umstellen ausprobiert habe - ja.

Für einen Laptop, der ständig durch verschiedene Zeitzonen reist ist es auch weniger geeignet. Für einen Server würde es gehen...
Der Vollständigkeit halber sollte man auch noch erwähnen, dass sich die Regeln für die Sommerzeit ändern können - zuletzt 1996.

Die Perl-Lösung scheint dann wohl der einzige Weg das Problem 100%ig zu lösen. ;)

Gruß Andi
 
date -v+1d
 
  • Gefällt mir
Reaktionen: promille
hui ging das schnell! danke olivetti!

gibts sowas ähnliches auch für den vorigen und den kommenden Monat? In Schrift, also Oktober und Dezember...

riesen dank nochmal!
 
date -v-1m
date -v+1m

man date (unter Examples sind schöne Beispiele dabei)
 
Zurück
Oben Unten