rafi
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
Hallo, ich benötige für mein shell-Skript eine Addition von verschiedenen Zeitwerten um ein Gesamtzeitintervall zu ermitteln. Die einzelnen Summanden liegen als Variable vor und werden aus XML Dateien geparsed, diese sehen z.B. so aus: intervall1=1m
intervall2=3m
intervall3=15d
intervall4=20d wie kann ich die Zusammenzählen lassen zu einer Zeitmenge und diese dann z.B. mit %m&d ausgeben, was dann hier 0435 ergeben würde? (der Fall dass über 99 Tage aufaddiert werden kommt nicht vor) (diesen Wert benötige ich dann um ihn auf ein "reales Kalenderdatum" aufzuaddieren um ein Fälligkeiten zu berechnen) Kann date das? Danke
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Wenn du Zeitangaben verwendest, die date versteht, kannst du so ein Datum direkt errechnen lassen:
| intervals=("1 month" "3 months" "15 days" "20 days")
date -d "2018-05-11 $(printf "%s " "${intervals[@]}")"
|
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
Hi, ah wunderbar jetzt gehts! vielen Dank. Das ist echt praktisch so.
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Hey, dafür nimmst du am besten dateadd aus dateutils $ dateadd -i %Y-%m-%d-%H-%M 2018-05-03-10-00 +1m +3m +15d +20d
2018-06-07T10:04:00 Viele Grüße, Frink
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
Hi Frink, deine Lösung ist auch super | dateutils.dadd -i %y%m%d 180101 +1m +3m +15d +20d -f %y%m%d
|
vielen Dank kleine Nachfrage noch würde es auch gehen einen Wert auszugeben ohne dabei ein "absolutes" Datum zu verwenden also nur +1m +3m +15d +20d aufaddieren zu 0435 in der Form %m%d ? nachtrag: ja | dateutils.dadd -i %y%m%d 000000 +1m +3m +15d +20d -f %m%d
|
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Man muss nur darauf achten, dass die Addition nicht kommutativ ist, s. man dateadd Note that duration addition is not commutative!
2000-03-30 +1mo +1d -> 2000-05-01
2000-03-30 +1d +1mo -> 2000-04-30
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
ok, das klingt logisch, da muss ich mal einen Tee trinken gehen und darüber nachdenken, was und ob das für mein Skript was zu bedeuten hat...
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Wenn du nur Minuten und Tage aufaddierst, dann nicht.
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
Ja, ich sehs gerade, es alterniert tatsächlich genau in diesem Fall, je nachdem ob der Monat 30 oder 31 Tage hat ob man zuerst den Monat oder den Tag aufaddiert um ein früheres oder späteres Datum zu erhalten. Zeit ist schon was krasses, damit gut umzugehen zu wissen das ist schon mächtig ☺
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Achso, für Monate musst du das Kürzel "mo" benutzen und ja dann ist es relevant.
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
m und mo scheint keinen Unterschied zu machen.
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Also bei mir macht es einen Unterschied und laut man -Page sollte es auch. $ dateutils.dadd -i %Y-%m-%d-%H-%M 2018-05-03-10-00 +1m +3m +15d +20d
2018-06-07T10:04:00
$ dateutils.dadd -i %Y-%m-%d-%H-%M 2018-05-03-10-00 +1mo +3mo +15d +20d
2018-10-08T10:00:00
|
rafi
(Themenstarter)
Anmeldungsdatum: 7. Februar 2006
Beiträge: 1050
Wohnort: Baden-Baden
|
ja, das macht Sinn, aber hier: | $ dateutils.dadd -i %y%m%d 000000 +1m +3m +15d +20d -f %m%d
0505
$ dateutils.dadd -i %y%m%d 000000 +1m +3mo +15d +20d -f %m%d
0505
|
wunder mich grad selber warum er das m bei mir nicht als Minuten wertet... werds aber auf jedenfall mit mo machen
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Okay.. Sieht für mich aus wie ein komischer Bug. Lol. Vielleicht sollte man das Tool doch nicht benutzen.
|
Prof._Frink
Anmeldungsdatum: 29. Mai 2010
Beiträge: 1096
|
Ich habe mal beim Entwickler nachgefragt und das ist die Antwort:
Hey,
thanks for the report. That's a historical artefact. Back in the days there were two sets of tools, one for handling dates only (which treated the m suffix as months) and one for date/times (which used mo for months and m for minutes). When we married the two sets, as a compromise and for backward compatibility, we decided to treat the m suffix in dates-only input as months. Whereas date/time input will treat mo as months and m as minutes.
|