Tage bis zum Geburtstag berechnen

Diskutiere Tage bis zum Geburtstag berechnen im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo zusammen, ich möchte gerne die restlichen vom aktuellen Datum bis zum nächsten Geburtstag berechnen. Ich habe das so Versucht, aber...

  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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    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. Chemnitzer Linux-Tage abgesagt

    Chemnitzer Linux-Tage abgesagt: Die Chemnitzer Linux-Tage am kommenden Wochenende wurden aufgrund der aktuellen Entwicklungen bzgl. COVID-19/Corona kurzfristig abgesagt....
  2. Gewinnspiel: Ticketpass für »IT-Tage 2019«

    Gewinnspiel: Ticketpass für »IT-Tage 2019«: Pro-Linux verlost einen Ticketpass für die »IT-Tage 2019«, bestehend aus Eintritt für drei Konferenztage und einen Workshop. Die »IT-Tage 2019«...
  3. Chemnitzer Linux-Tage 2020 rufen zur Mitarbeit auf

    Chemnitzer Linux-Tage 2020 rufen zur Mitarbeit auf: Für die am 14. und 15. März 2020 stattfindenden Chemnitzer Linux-Tage ist der »Call for Lectures« und »Call for Presentations« online. Gesucht...
  4. Gewinnspiel: Kieler Open Source und Linux Tage

    Gewinnspiel: Kieler Open Source und Linux Tage: Pro-Linux verlost Merchandising-Artikel der Kieler Open Source und Linux Tage, die am 20. und 21. September 2019 stattfinden. Weiterlesen...
  5. Programm der Kieler Open Source und Linux Tage veröffentlicht

    Programm der Kieler Open Source und Linux Tage veröffentlicht: Das Programm der 17. Kieler Open Source und Linux Tage, die am 20. und 21. September stattfinden, steht nun fest. Wie immer bietet die...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden