[Frage] Datum von morgen auf FB ermitteln

kay1971

Neuer User
Mitglied seit
20 Nov 2006
Beiträge
149
Punkte für Reaktionen
0
Punkte
16
Hallo zusammen,

für ein kleines Script auf meiner 7390 ohne Freetz suche ich eine Möglichkeit, das Datum und den Wochentag von morgen (oder einem anderen beliebigen Zeitraum) zu ermitteln.

Leider sind bisher alle meine Versuche mit Date fehlgeschlagen.

Als Busybox können v1.16.0 und v1.16.1 zum einsatz kommen.

Mit keiner der Busyboxen funktioniert so etwas simples wie:
--date='tomorrow'

Auch date -d $(date +%d$1)+2 +%A liefert nicht den richtigen Wochentag zurück
Hat jemand eine Idee?
 
Zuletzt bearbeitet:
Hat jemand eine Idee?
Mit etwas Recherche im Internet findest Du geeigneten source code, mit dem Du dir ein binary für die Box compilieren kannst, das das macht was Du haben willst. Z. B.:
Code:
/* tomtime.c*/
#include <stdio.h>
#include <time.h>

int main (void)
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  rawtime += 24*60*60;
  timeinfo = localtime ( &rawtime );
  printf ( "%s", asctime (timeinfo) );
  
  return 0;
}
Code:
gcc -Wall tomtime.c -o tomtime
Code:
# ./tomtime
[COLOR=red]Sun Aug 28 16:03:27 2011[/COLOR]
 
Mit etwas Recherche im Internet findest Du geeigneten source code, mit dem Du dir ein binary für die Box compilieren kannst

Dazu müsste compileren können, was bei mir nicht gegeben ist.
 
Mit etwas Recherche im Internet findest Du eine Beschreibung der Shell.

Was genau sollte denn die Konstruktion
Code:
date -d $(date +%d$1)+2 +%A
bewirken?

Unterstützt Deine Busybox das Datumsformat "@Zahl"? Wenn ja, kannst Du das verwenden:
Code:
# date -d@$(( $(date +%s) + 86400))
Sun Aug 28 18:04:54 CEST 2011
 
Ich habe sehr wohl durch Google gewühlt, aber alle Lösungsansätze setzen auf die Verwendung von --date'tomorow'.

Leider unsterstützt dies die Fritzbox Busybox nicht.

Meine "Konstruktion" sollte den Wochentag von übermorgen ausgeben.
Mit +1 anstatt von +2 kommt zumindestens heute Sonntag dabei heraus. Aber halt nicht mehr für übermorgen.

Die Fritzbox Buysbox mag auch kein @zahl:

Code:
# date -d@$(( $(date +%s) + 86400))

date: invalid date '@1314549146'
#
# /tmp/busybox date -d@$(( $(date +%s) + 86400))
date: invalid date '@1314549167'

Wobei 1314549167 schonb korrekt wäre, nur die Rückwärtskonvertierung geht nicht. :(
 
Dann schau Die mal die kompletten Zeiten genauer an:
Code:
# date -d 00+0
Sat Aug 27 00:00:00 CEST 2011
# date -d 00+1
Sat Aug 27 00:01:00 CEST 2011
# date -d 24+1
Sun Aug 28 00:01:00 CEST 2011
# date -d 48+1
Mon Aug 29 00:01:00 CEST 2011
# date -d 96+1
Wed Aug 31 00:01:00 CEST 2011
Es ist also eher Zufall, dass mit "27+1" das Datum von morgen kam.
Es scheint eher ein Fehler von Busybox date zu sein, das normale date akzeptiert so einen Wert nicht. Allerdings kann man das in gewissen Grenzen nutzen für das, was Du vor hast.

Was die andere Konstruktion betrifft, dafür musst Du eine neuer Busybox suchen, die diese Art von Angaben unterstützt.
 

Anhänge

  • date.tar
    55.5 KB · Aufrufe: 3
Meine "Konstruktion" sollte den Wochentag von übermorgen ausgeben.
Mit +1 anstatt von +2 kommt zumindestens heute Sonntag dabei heraus. Aber halt nicht mehr für übermorgen.
Das binary aus dem Anhang (lediglich 3,7 KB) gibt Tag, Datum und Zeit von übermorgen aus.
Code:
:~/myfreetz/freetz7520/freetz-trunk> file packages/target-mips_uClibc-0.9.31.1/dayaftertomorrow-0.1/root/usr/bin/dayaftertomorrow                   
packages/target-mips_uClibc-0.9.31.1/dayaftertomorrow-0.1/root/usr/bin/[B]dayaftertomorrow[/B]: ELF 32-bit MSB executable, [COLOR=red]MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked[/COLOR] (uses shared libs), with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, stripped
Code:
/* dayaftertomorrow.c*/
#include <stdio.h>
#include <time.h>

int main (void)
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  [COLOR=red]rawtime += 48*60*60;[/COLOR]
  timeinfo = localtime ( &rawtime );
  printf ( "%s", asctime (timeinfo) );
  
  return 0;
}
Code:
root@fritz:/var/media/ftp/uStor01/archiv# ldd ./dayaftertomorrow
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aabe000)
        libc.so.0 => /lib/libc.so.0 (0x2aadc000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
Code:
root@fritz:/var/media/ftp/uStor01/archiv# ./dayaftertomorrow
Mon Aug 29 20:36:46 2011
 

Anhänge

  • dayaftertomorrow.tar.gz
    1.8 KB · Aufrufe: 0
Ich weiß nicht zur welchen Uhrzeit die Berechnung angestoßen wird und auch wie genau sie sein soll, wollte Euch nur darauf aufmerksam machen, dass die Berechnung, die nur darauf basiert 24*60*60(=86400) hinzuzuaddieren, zwei mal im Jahr u.U. das falsche Ergebnis liefert - es gibt Tage, die 23 bzw. 25 Stunden haben.
 
Durch Schaltsekunden wird ein Tag höchstens um eine Sekunde länger (oder kürzer, wenn das auch bisher nicht vorgekommen ist), jedoch nicht um eine ganze Stunde. In den meisten Fälle sollte das zu vernachlässigen sein.
 
er13 meint den letzten Sonntag im März (23 Std., von 2 Uhr auf 3 Uhr) und den letzten Sonntag im Oktober (25 Std., von 3 Uhr auf 2 Uhr).
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.