ISO 8601 Time to Seconds since 1970

lawanscha

lawanscha

dada
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
 
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.
 
Danke, dass Prpblem lag bei "T". Habs einfach herausgenommen und siehe da - geht. Trotzdem Danke!!
 

Ähnliche Themen

Rollei Mini Wifi Camcorder

NagiosGrapher 1.7.1 funktioniert nicht

Router crash bei Fedora 15!?

Modulfehler?

HP PSC 2175 - CUPS druckt nicht

Zurück
Oben