Tage bis zum Geburtstag berechnen

Dieses Thema: "Tage bis zum Geburtstag berechnen" im Forum "Shell-Skripte" wurde erstellt von lorglas, 21.04.2005.

  1. #1 lorglas, 21.04.2005
    lorglas

    lorglas Grünschnabel

    Dabei seit:
    19.04.2005
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo zusammen,

    ich möchte gerne die restlichen vom aktuellen Datum bis zum nächsten Geburtstag berechnen.
    Ich habe das so Versucht, aber dabei kommt nicht heraus.

    ThisBirthday=$(catattr META:birthday "$ThisPerson" | cut -f3 -d: )

    datum=$(date +%d.%m.%Y)

    resttage=$(expr `date -d "$datum" "+%s"` - `date -d "$ThisBirthday" "+%s"`) / 86400

    Der Geburtstag (ThisBirthday enthält z.b. 16.04.1979) und das Datum werden ganz normal angezeigt 21.04.2005, hat jemand eine Lösung für mich.

    Gruß Lorglas

    www.besly.mittilgart.de
    :hilfe2:
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. proggi

    proggi Noob aus Beruf

    Dabei seit:
    20.05.2003
    Beiträge:
    273
    Zustimmungen:
    0
    Ort:
    Deutschland (Sachsen)
    Ich weiß jetzt nicht, ob das mit Shellscripts möglich ist (ich code nur PHP), aber man könnte doch einen Timestamp aus dem Datum machen und dann den größeren minus den kleinerer (oder andersrum, hauptsache es ist der absolute Wert), ergibt die Differenz und dann kannste da ja sicher mit einer Shellfunktion den Tag auslesen.

    Verstehst du was ich meine?
     
  4. #3 MrFenix, 21.04.2005
    Zuletzt bearbeitet: 22.04.2005
    MrFenix

    MrFenix Executor

    Dabei seit:
    16.10.2004
    Beiträge:
    480
    Zustimmungen:
    0
    Ort:
    Siegen, NRW
    Hier mal ein C++ Programm was ich geschrieben hab dazu:
    timeofterror.cpp:
    Code:
    #include <time.h>
    #include <iostream>
    #include <cstdlib>
    #include "conv.h"
    
    using namespace std;
    
    int main(int argc, char * argv[]) {
    	
    	
    	
    	tm olddate, newdate;
    	time_t now, then;
    	double diff =0;
    	
    	if (strcmp(argv[1], "-f") == 0) {
    		char * buf = (char*)calloc(100, sizeof(char));
    		
    		strncpy(buf, getenv("HOME"), 90);
    		strcat(buf, "/.tot");
    		
    		FILE * handle = fopen(buf, "r");
    		
    		if (handle == 0) {
    			cout << "error: unable to read " <<  buf << " !" << endl;
    			return -1;
    		} 
    		
    		free(buf);
    		buf = (char*)calloc(100, sizeof(char));
    		fread(buf, 1, 100, handle);
    		
    		if (strptime(buf, "%D %H:%M:%S", &olddate) == 0) {
    			cout << "error: invalid date or format! (must be mm/dd/yy h:m:s)" << endl;
    			return -1;
    		}
    		
    	} else if (argc != 3) {
    		cout << "usage: tot \"date\" <format>" << endl;
    		return -1;
    	} else {
    		if (strptime(argv[1], argv[2], &olddate) == 0) {
    			cout << "error: invalid date or format!" << endl;
    			return -1;
    		}
    	}
    	
    	time(&now);
    	then = mktime(&olddate);
    	diff = difftime(now, then);
    	
    	int years, days, hours, minutes, seconds, remainder;
    	
    	years = (int)diff / 31536000;
    	remainder = (int)diff % 31536000;
    	days = remainder / 86400;
    	remainder = remainder % 86400;
    	hours = remainder / 3600;
    	remainder = remainder % 3600;
    	minutes = remainder / 60;
    	seconds = remainder % 60;
    	
    	cout << years << " Years " << days << " Days " << hours << " Hours " << minutes << " Minutes " << seconds << " Seconds" << endl;
    	
    	
    	
    	return 0;
    	
    }
    
    conv.h:
    Code:
    #include "string.h"
    #include "math.h"
    
    double strtodouble(char* str) {
    	
    	long int fl, efl, e, mf;
    	unsigned long int i, k;
    	double outp=0;
    
    	fl = 0;
    	efl = 0;
    	e = 0;
    	mf = 1;
    
    
    	char numbers[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    
    	for (i=0; i<strlen(str); i++) {
    		
    		for (k = 0; k < strlen(numbers); k++) {
    				
    			
    			if (str[i] == '.') {
    			fl = 10;
    			}
    
    			if (str[i] == 'e' || str[i] == 'E') {
    				efl = 1;
    				e = 0;
    			}
    			
    
    			if (str[i] == '-' && efl == 1) {
    				efl = -1;
    				e = 0;
    			} else if (str[i] == '-' && efl == 0) {
    				mf = -1;
    			}
    			
    
    			if (numbers[k] == str[i]) {
    				
    				if (efl != 0) {
    					e = (e * 10) + k;
    				} else {
    
    					if (fl == 0) {
    						outp = (outp * 10) + k;
    					}
    				
    					if (fl > 0) {
    						outp = outp + (double)k / (double)fl;
    						fl = fl * 10;
    					}
    				}
    			}
    			
    
    		}
    	}
    	e = efl * e;
    
    	outp =  mf * outp * pow(10, e);
    	return outp;
    }
    
    Mag teilweise unsauber sein und man macht das mit den .h Dateien nicht in der Weise und ach ja ich weiß, dass es dafür funktionen gibt, aber ich hasse einfach alles was mit atoi, atof, töftöf usw. zu tun hat :devil:

    EDIT: bedient man z.B. mit
    Fenix@Fenix Backup $ ./tot "03/19/04 20:00:00" "%D %H:%M:%S"
     
  5. #4 TenBaseT, 22.04.2005
    TenBaseT

    TenBaseT Foren As

    Dabei seit:
    07.11.2004
    Beiträge:
    99
    Zustimmungen:
    0
    Nur eine Idee: gibt es ein Programm, welches das UNIX Datum in das DOS Format umrechnen kann? Bekanntlich isz ja der ganzzahlige anteil die Tage, die seit dem 1.1.1900 vergangen sind. Der Nachkommanteil (Sekunden seit Mitternacht) kann vernachlässigt werden.

    Hans
     
  6. #5 rup, 25.04.2005
    Zuletzt bearbeitet: 25.04.2005
    rup

    rup Haudegen

    Dabei seit:
    10.04.2002
    Beiträge:
    627
    Zustimmungen:
    0
    So sollte es in etwa gehen:

    Code:
    Birthday="25 Dec 2006"
    echo "(`date -d "$Birthday" +%s` - `date +%s`) / 86400" |bc
    
    Gruss Rupert
     
Thema:

Tage bis zum Geburtstag berechnen

Die Seite wird geladen...

Tage bis zum Geburtstag berechnen - Ähnliche Themen

  1. Geburtstage im Kalender

    Geburtstage im Kalender: Ziemlich cool das mit dem Kalender, da verpasst man keinen Geburtstag von den anderen Membern und kann gleich gratulieren ! :)) Außerdem stehts...
  2. Grazer Linuxtage am 29. und 30. April

    Grazer Linuxtage am 29. und 30. April: Das Team der Grazer Linuxtage lädt an diesem Wochenende Interessierte dazu ein, sich rund um das Thema Linux und Open Source zu informieren. Die...
  3. Gewinnspiel: Chemnitzer Linux-Tage 2016

    Gewinnspiel: Chemnitzer Linux-Tage 2016: Pro-Linux verlost Eintrittskarten und Merchandising-Artikel der Chemnitzer Linux-Tage, die am 19. und 20. März 2016 stattfinden. Weiterlesen...
  4. Programm der Chemnitzer Linux-Tage 2016 steht

    Programm der Chemnitzer Linux-Tage 2016 steht: Am Wochenende des 19. und 20. März steht Chemnitz, oder genauer gesagt die TU Chemnitz, wieder ganz im Zeichen des Tux. Nun haben die...
  5. Chemnitzer Linux-Tage 2016 rufen zur Mitarbeit auf

    Chemnitzer Linux-Tage 2016 rufen zur Mitarbeit auf: Für die am 19. und 20. März 2016 stattfindenden Chemnitzer Linux-Tage ist der »Call for Lectures« und »Call for Presentations« online. Gesucht...