lliillaa
Goto Top

Datestring in Date konvertieren und damit rechnen

Hallo Forum,

ich habe folgendes Problem:

[code]
[root@server]# date
So. 6. Okt 13:16:53 CEST 2013
[/code]

Date liefert mir ein aktuelle Datum!

Wenn ich dieses Datum aber von wo anders habe und von dem Date beispielsweise 7 Tage abziehen möchte, dachte ich, ich könnte so vorgehen:

[code]
[root@server]# date -d "So. 6. Okt 13:16:53 CEST 2013 -7 day" +"%a. %e. %b %R:%M:%S %Z %Y"
date: ungültiges Datum „So. 6. Okt 13:16:53 CEST 2013 -7 day“
[/code]

Leider bekomme ich immer die folgende Fehlermeldung.
Ich weiß nicht genau, wie ich die Formatierung richtig angehen muss.
Hat jemand eine Idee?

Schöne Grüße

Content-Key: 218690

Url: https://administrator.de/contentid/218690

Printed on: April 19, 2024 at 23:04 o'clock

Member: colinardo
colinardo Oct 07, 2013 updated at 20:52:54 (UTC)
Goto Top
Hallo LLIILLAA,
date akzeptiert nicht beliebige Strings im Paarameter -d. Wie diese formatiert sein müssen steht hier. Vor allem akzeptiert es keine deutschen Datumsangaben wie Okt oder So sondern nur die englischen Equivalente;
Ein gültiges Datum könnte beispielsweise so aussehen:
date -d 'Sunday 6 Oct 2013 13:16:53.000000'
Du müsstest also deinen Date-String mit einem Script zerlegen und daraus ein gültiges Datum zusammenbauen, und dann damit rechnen.
Beispiel:
#!/bin/bash
RAW_DATUM='So 6. Okt 13:16:53 CEST 2013'  
WOCHENTAG=$(echo "$RAW_DATUM" | cut -d' ' -f1)  
TAG=$(echo "$RAW_DATUM" | cut -d' ' -f2 |cut -d'.' -f1)  
MONAT=$(echo "$RAW_DATUM" | cut -d' ' -f3)  
ZEIT=$(echo "$RAW_DATUM" | cut -d' ' -f4)  
ZONE=$(echo "$RAW_DATUM" | cut -d' ' -f5)  
JAHR=$(echo "$RAW_DATUM" | cut -d' ' -f6)  

case "$WOCHENTAG" in  
	'Mo')  
	WOCHENTAG='Mon'  
	;;
	'Di')  
	WOCHENTAG='Tue'  
	;;
	'Mi')  
	WOCHENTAG='Wed'  
	;;
	'Do')  
	WOCHENTAG='Thu'  
	;;
	'Fr')  
	WOCHENTAG='Fri'  
	;;
	'Sa')  
	WOCHENTAG='Sat'  
	;;
	'So')  
	WOCHENTAG='Sun'  
	;;
esac
case "$MONAT" in  
	'Mär')  
	MONAT='Mar'  
	;;
	'Mai')  
	MONAT='May'  
	;;
	'Okt')  
	MONAT='Oct'  
	;;
	'Dez')  
	MONAT='Dec'  
	;;
esac

date -d "$WOCHENTAG $TAG $MONAT $JAHR $ZEIT.000000 $ZONE - 7 days"  

Alternativ kannst du dein Datum direkt im englischen Format ausgeben indem du die Sprach-Variable in der Shell vorher auf Englisch umstellst
LANG=en_US
und danach wieder auf Deutsch zurück:
LANG=de_DE.utf8

Grüße Uwe
Member: LLIILLAA
LLIILLAA Oct 08, 2013 at 06:13:36 (UTC)
Goto Top
Hallo Uwe,

danke für deine Antwort.
Das ist sehr hilfreich.
Dann klappt das einfach leider so nicht....
Schade, ja dann werde ich das wohl irgendwie zerlegen müssen.

Schönen Tag