Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem mit strptime()-Funktion

4 views
Skip to first unread message

Richard Spitz

unread,
Mar 26, 2003, 8:43:05 AM3/26/03
to
Hallo SINIX-Gemeinde,

unter RU 5.43C60 habe ich ein Problem mit der Funktion strptime():

Sie funktioniert einwandfrei mit einem Datum im Format "DD.MM.YYYY",
z.B. strptime("20.03.2003","%d%m%Y",&tm)

Beim Datumsformat "YYYYMMDD" funktioniert es aber nicht. So liefert
strptime("20030320","%Y%m%d",&tm) den Nullzeiger zurück.

Interessanterweise funktioniert der exakt gleiche Quellcode unter
Linux (SuSE 7.3, gcc 2.95.3, glibc 2.2.4, so dass ich eher ein
Problem mit der SINIX-Implementation vermute. Ich brauche aber
die Möglichkeit, genau dieses Datumsformat unter meiner SINIX-
Version zu bearbeiten. Hat jemand eine Idee?

Gruß, Richard Spitz
--
+-------------------------------+---------------------------------------+
| Dr. med Richard Spitz | Mail: sp...@ana.med.uni-muenchen.de |
| Klinik für Anaesthesiologie | Tel : +49-89-7095-6110 |
| Klinikum der Univ. München | FAX : +49-89-7095-6420 |
| 81366 München, Germany | GSM : +49-172-8933578 |
+-------------------------------+---------------------------------------+

doj

unread,
Mar 26, 2003, 2:12:43 PM3/26/03
to
> Sie funktioniert einwandfrei mit einem Datum im Format "DD.MM.YYYY",
> z.B. strptime("20.03.2003","%d%m%Y",&tm)
> Beim Datumsformat "YYYYMMDD" funktioniert es aber nicht. So liefert
> strptime("20030320","%Y%m%d",&tm) den Nullzeiger zurück.

ich würde hier einfach eine brute-force routine benutzen um das datum in
ein format zu konvertieren, mit dem die SINIX libc klarkommt. Für deine
beiden Beispiel würde das so aussehen.

#include <string.h>
char *convdate(char *s)
{
static char buf[10];
if(strlen(s)<8)
return 0;
buf[0]=s[6];
buf[1]=s[7];
buf[2]='.';
buf[3]=s[4];
buf[4]=s[5];
buf[5]='.';
buf[6]=s[0];
buf[7]=s[1];
buf[7]=s[2];
buf[8]=s[3];
buf[9]=0;
return buf;
}
void main()
{
strptime(convdate("20.03.2003"),"%d%m%Y",&tm);
}

Zu beachten ist hierbei, das convdate einen pointer auf eine static
variable zurückgibt. Der pointer darf also nicht mit free() behandelt
werden und convdate darf auch nicht in rekursiven Funktionen benutzt
werden. Wenn natürlich unterschiedliche Datumsformate als Eingabe
auftreten können, müßte man convdate() auch entsprechend anpassen. Wenn
man oonvdate() rekursiv benutzen möchte, dann muß man den speicher einfach
mit malloc() allozieren und irgendwann später wieder freigeben.

--
----> doj / cubic
-----> http://www.cubic.org
-----> http://llg.cubic.org

Richard Spitz

unread,
Mar 27, 2003, 3:13:58 AM3/27/03
to
"doj" <djRE...@tecs.de> schrieb:

>> Beim Datumsformat "YYYYMMDD" funktioniert es aber nicht. So liefert
>> strptime("20030320","%Y%m%d",&tm) den Nullzeiger zurück.
>
>ich würde hier einfach eine brute-force routine benutzen um das datum in
>ein format zu konvertieren, mit dem die SINIX libc klarkommt.

Danke für den Tipp, genauso habe ich es inzwischen auch schon gemacht,
nachdem ich bei weiteren Recherchen rausgefunden habe, dass sich die
SINIX-Implementation an den Standard hält. Der fordert nämlich
zwischen den einzelnen Formatangaben immer einen Whitespace oder
ein sonstiges Trennzeichen.

Gruß, Richard

0 new messages