Datum als Integer bzw. Typumwandlung string in int

Post Reply
Message
Author
-=edm=-

Datum als Integer bzw. Typumwandlung string in int

#1 Post by -=edm=- »

Hi
ich muss das aktuelle datum in folgender form in eine binärdatei schreiben:

Code: Select all

00 04 06 07
[00] [Jahr 2 stellig] [Monat] [Tag]
Ich hab aber absolut kein plan. suche in google hat auch nix gebracht. ich komme so weit, dass das datum als string in ner variable steht. Wenn ich aber die Variable direkt in die datei schreibe, steht natürlich was anderes drin.

Ich könnte natürlich jeweils jahr, monat und tag in einzelnen strings speichern und diese dann in int umwandeln. Wie funktioniert aber ein cast von string nach int ?

Oder hat jemand eine andere idee wie man das ganze anstellen könnte ?

gast

Re: Datum als Integer bzw. Typumwandlung string in int

#2 Post by gast »

nimm einfach eine unsigned long variable und speicher es im binärmodus in einer datei.:

unsigned long datum = 0x00040607;

fwrite(&datum,sizeof(datum),1,fopen("blabla.txt","ab"));

is nich

datum

#3 Post by is nich »

wozu erst ein string aus den daten machen?

#include <stdio.h>
#include <time.h>

int main(){
time_t rawtime;
struct tm * timeinfo;

time ( &rawtime ); //accepts a pointer
timeinfo = localtime ( &rawtime );
char ofilename[] = "mytime.bin";
FILE *ofp;

ofp = fopen(ofilename,"wb");
fputc((timeinfo->tm_year - 100), ofp);
fputc(timeinfo->tm_mon, ofp);
fputc(timeinfo->tm_mday, ofp);
fclose(ofp);

}

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

#4 Post by hjb »

Hi!

Es ist unfaßbar. Kaum ist die Jahrhundertwende vorbei mit ihren bekannten Problemen, fangen schon wieder irgendwelche Lernunfähige damit an, Jahreszahlen zweistellig zu speichern. Davon abgesehen, hättest du den Code zeigen können, damit man Verbesserungsvorschläge machen kann.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

-=edm=-

#5 Post by -=edm=- »

@gast

es sollte schon das _aktuelle_ datum sein :-)
ausserdem codiert doch intel little endian. wenn dann so:
unsigned long datum = 0x07060400;

@is nich
Danke,
funzt wunderbar. Beim Monat muss man noch ne 1 addieren. ist aber normal, oder ?

@hjb
sonst noch was zu meckern ??

Aber ich werd es dir erklären: Das ganze muss in eine dBase datei geschrieben werden und zeigt nur das änderungsdatum. Laut der formatbeschreibung ist aber für das jahr nunmal nur 1 Byte vorgesehen. Das Jahr kann man wohl direkt reinschreiben oder so, dass die summe mit 1900 das aktuelle jahr ergibt, also 104 => Jahr zw. 1900-2155 möglich. Da es kein Problem ist, 100 bzw. 200 dazuzuaddieren habe ich die frage wie oben formuliert.
Allerdings scheit c den Wert eh so zu übergeben (Habe halt gedacht, es geht nur 2 oder 4 stellig). Deshalb habe ich die Frage so formuliert und wollte einfach noch 100 bzw. 200 jeweils addieren lassen.

Auch wenn das Problem gelöst ist, hier nochmal mein alter code:

Code: Select all

#include <stdlib.h> 
int main &#40;&#41;
&#123;
   char zstring&#91;7&#93;; 
   time_t zeit;
   time&#40;&zeit&#41;;
   strftime&#40;zstring,6,"%y%m%d",localtime&#40;&zeit&#41;&#41;;
   return 0;
&#125;

Post Reply