ISO 8601 Time to Seconds since 1970

Dieses Thema im Forum "C/C++" wurde erstellt von lawanscha, 09.09.2009.

  1. #1 lawanscha, 09.09.2009
    lawanscha

    lawanscha dada

    Dabei seit:
    16.01.2008
    Beiträge:
    73
    Zustimmungen:
    0
    Hi Leute,
    ich komme und komme nicht weiter.
    Habe einen String " 2009-09-09T15:13:30.000+02:00" und möchste diesen nur als unsigned long (also nur die Sekunde sein 1970) haben. Habe schon alles probiert und um so mehr ich google desto weniger raff mein Hirn! :think: :think: :think: 16 Uhr ist ne schlechte Zeit für soetwas!! Wer kann mir helfen??

    Gruss
    *w
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 floyd62, 09.09.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    einfache Möglichkeit: Datumsstring mit sscanf() zerlegen, mit den einzelnen Werten daraus eine struct tm füllen, und die dann mit mktime() in einen epoch time_t-Wert umrechnen; das Ganze schnell mal in C zusammengehackt:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    main(int argc, char *argv[])
    {
    	struct tm	tm;
    	time_t	t;
    	char	*date = "2009-09-09T15:13:30.000+02:00";
    	int	year, mon, day, hr, min, sec, ms, tzhr, tzmin;
    	char	tzsign;
    	int	rc = 0;
    
    
    	if ( argc > 1 )
    		date = argv[1];
    
    
    	printf("DATE: %s\n", date);
    
    	rc = sscanf(date, "%d-%d-%dT%d:%d:%d.%d%[+-]%d:%d", 
    		&year, &mon, &day, &hr, &min, &sec, &ms, &tzsign, &tzhr, &tzmin);
    
    	if ( rc == 10 ) {
    		tm.tm_year = year - 1900;
    		tm.tm_mon = mon - 1;
    		tm.tm_mday = day;
    		tm.tm_hour = hr;
    		tm.tm_min = min;
    		tm.tm_sec = sec;
    
    		t = mktime(&tm);
    		
    		printf("-> T = %ld\n", t);
    		printf("CHECK: %s\n", ctime(&t));
    	} else {
    		printf("ERROR: unable to parse date; found only %d values\n", rc);
    	}
    
    	exit(0);
    }
    
    ... nur so als erster Ansatz; dann müsste man evtl. die Zeitzone noch irgendwie verarbeiten etc., aber die Idee sollte mal klar sein, ok?

    Gruss,
    A.
     
  4. #3 lawanscha, 18.09.2009
    lawanscha

    lawanscha dada

    Dabei seit:
    16.01.2008
    Beiträge:
    73
    Zustimmungen:
    0
    Danke, dass Prpblem lag bei "T". Habs einfach herausgenommen und siehe da - geht. Trotzdem Danke!!
     
Thema:

ISO 8601 Time to Seconds since 1970

Die Seite wird geladen...

ISO 8601 Time to Seconds since 1970 - Ähnliche Themen

  1. CIFS VFS: Server hsdesk has not responded in 120 seconds. Reconnecting...

    CIFS VFS: Server hsdesk has not responded in 120 seconds. Reconnecting...: Guten Morgen, Mein Laptop (Linux-Mint 17.1, KDE) ist über LAN und router mit meinem PC (Linux-Debian-Wheezy) verbunden. Letzterer ist als PDC...