Hallo Ihr,
grosses Problem, mit date kann ich mir ja Datum, Tag, etc
aurechnen lassen. Wie kann ich mir den Tag davor ausrechnen
lassen? Tag-1, aber was ist wenn es der 1. ist?
Bitte um Hilfe
Danke im Vorraus
Gruss Christian
Einen Tag zurück rechnen
Re: Einen Tag zurück rechnen
Das Tolle an diesem Forum ist, dass man selbst als Antwortender immer noch lernt. Die Lösung für Dein Problem war mir bis vor kurzem selber unbekannt. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">date -d yesterday</font><hr></pre></blockquote>Formatstrings kann man natürlich auf mit angeben. Wahrscheinlich ist diese Lösung allerdings nicht sehr portabel; es scheint eine GNU-date-Erweiterung zu sein.
Jochen
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">date -d yesterday</font><hr></pre></blockquote>Formatstrings kann man natürlich auf mit angeben. Wahrscheinlich ist diese Lösung allerdings nicht sehr portabel; es scheint eine GNU-date-Erweiterung zu sein.
Jochen
Re: Einen Tag zurück rechnen
Hallo Jochen,
genau das ist ads Problem. Es geht nur mit GNU date.
Brauche das aber ohne Neuinstallationen unter Sun
das Yesterday habe ich selbst gefunden.
Trotzdem Danke
Gruss Christian
genau das ist ads Problem. Es geht nur mit GNU date.
Brauche das aber ohne Neuinstallationen unter Sun
das Yesterday habe ich selbst gefunden.
Trotzdem Danke
Gruss Christian
Re: Einen Tag zurück rechnen
Nu je, das wäer ja mal eine interessante Information für's erste Posting gewesen, hm? Meine Glaskugel ist nämlich ziemlich trübe heute... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Ist perl auf der Sun installiert? Dann kannst Du im Perl-Faq eine Methode dazu nachlesen, zu finden mittels:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">perldoc -q yesterday</font><hr></pre></blockquote>(Aber nicht als root.) Alles andere müsste man scheinbar doch in Handarbeit basteln...
Jochen
Ist perl auf der Sun installiert? Dann kannst Du im Perl-Faq eine Methode dazu nachlesen, zu finden mittels:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">perldoc -q yesterday</font><hr></pre></blockquote>(Aber nicht als root.) Alles andere müsste man scheinbar doch in Handarbeit basteln...
Jochen
Re: Einen Tag zurück rechnen
> mit date kann ich mir ja Datum, Tag, etc aurechnen lassen. Wie kann ich mir den Tag davor ausrechnen lassen? Tag-1, aber was ist wenn es der 1. ist?
gibt es unter solaris (welche shell ist das denn, korn?) auch arrays wie in bash? damit liesse sich das recht einfach formulieren. in bash kann man schreiben:
<font face="Courier New">TAGE=(31 28 31 30...etc); printf "Januar hat ${TAGE[0]} Tage"</font><!--fixed-->, und der rest wäre damit recht einfach zu machen (pseudocode):<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# y, m, d = aus date holen (+%Y/m/d).
tage=(31 28 ...)
if (d > 1)
yg=y
mg=m
dg=d-1
else # tag 1
if (m > 1)
yg=y
mg=m-1
dg=tage [mg-1]
else # tag 1, monat 1
yg=y-1
mg=12
dg=tage [mg-1] # == 31
fi
fi</font><hr></pre></blockquote>das eigentliche problem (und hier noch nicht berücksichtigt) sind schaltjahre. dafür gibts aber einfache algorithmen im internet. aber das alles in shell zu programmieren ist trotzdem keine schöne sache. wie jochen sagte, ist perl wohl die bessere wahl.
gibt es unter solaris (welche shell ist das denn, korn?) auch arrays wie in bash? damit liesse sich das recht einfach formulieren. in bash kann man schreiben:
<font face="Courier New">TAGE=(31 28 31 30...etc); printf "Januar hat ${TAGE[0]} Tage"</font><!--fixed-->, und der rest wäre damit recht einfach zu machen (pseudocode):<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# y, m, d = aus date holen (+%Y/m/d).
tage=(31 28 ...)
if (d > 1)
yg=y
mg=m
dg=d-1
else # tag 1
if (m > 1)
yg=y
mg=m-1
dg=tage [mg-1]
else # tag 1, monat 1
yg=y-1
mg=12
dg=tage [mg-1] # == 31
fi
fi</font><hr></pre></blockquote>das eigentliche problem (und hier noch nicht berücksichtigt) sind schaltjahre. dafür gibts aber einfache algorithmen im internet. aber das alles in shell zu programmieren ist trotzdem keine schöne sache. wie jochen sagte, ist perl wohl die bessere wahl.