Thread!!!
|
silicon
Usernummer # 503
|
verfasst
Hi,
muss hier einen Sche!ss Datumsvergleich durchführen. Habe nur die Daten Day, Month, Year als Int-Werte vorliegen und muss diese mit dem akt. Datum vergleichen.
Hab schon ewig gegooglet, aber für C findet man fast gar nix mehr. Da muss es doch irgendeinen Algorithmus für geben, ich hab kein Bock auf Ellenlange if´s und evtl. Fehler.
Wäre nett. Vielleicht hat jemand sowas irgedndwo rumliegen.
ps: ich hasse C!!!
cheers, silicon
|
mik
Usernummer # 5095
|
verfasst
Das geht mit getdate():
Klick
|
nuc
Usernummer # 4824
|
verfasst
heh. Für C findet man fast gar nix mehr? =)
12.7 könnte helfen?
Ist das für 'ne Hausaufgabe, oder warum _muß_ es unbedingt ANSI C sein?
|
silicon
Usernummer # 503
|
verfasst
@mik,
Danke für den Link. Die aktuelle Zeit habe ich schon per Sql (andere Geschichte). Mir liegen 2 Dati in folgendem Format vor
*s = 20.08.2003 / Aktuelle Zeit datum = Eingegebenes Datum (zB. 20.03.2004)
Es soll gelten:
code:
wenn datum < *s return -1;
ich navigier innerhalb von *s wiefolgt:
code:
int *p; int month; int *s; int *d;
monat des eingegebenen datum
code:
p = datum + 3; (3 Stellen nach rechts, der Monat) month = atoi (p);
monat des aktuellen datum
code:
d = s + 3
als beispiel:
code:
if (day < atoi(f) && year < atoi(e) && month < atoi(d)) return -1;
..usw...
Ich weiss, sieht ziemlich kompliziert aus. Ist aber halt so. Wünsche mir PHP
@nuc:
danke, genau die seite hatte ich auch schon. aber leider muss ich gerade sozusagen meine strings bzw. int in dieses time_t-format umwandeln.
Converting a string to a time_t is harder, because of the wide variety of date and time formats which should be parsed. Some systems provide a strptime function; another popular routine is partime (widely distributed with the RCS package), but these are less likely to become standardized
cheers, silicon
|
silicon
Usernummer # 503
|
verfasst
ah grad noch gefunden (um meinen string in das time-format umzuwandeln)
In dieser Funktion sind führende Jahrhundertziffern erlaubt, jedoch nicht erforderlich.
Wird der folgende Aufruf ausgeführt:
struct tm thetime;
strptime( "11/22/02", "%m/%d/%y", &thetime ),dann könnte dies als 22/11/1902 oder 22/11/2002 gedeutet werden, da die Anwendung nicht weiß, um welches Jahrhundert es sich handelt.
*** ja was jetzt? geht das oder geht das nicht? shit shit shit...testen...
cheers, silicon
|
PigFace
Usernummer # 4299
|
verfasst
Ist doch kein Problem, übergib halt ein vierstelliges Jahr (bzw. eine vierstellige String-Repräsentation der Jahreszahl) und es ist eindeutig.
|
silicon
Usernummer # 503
|
verfasst
So, probier´s jetzt mit der Funktion strptime()...leider gibt´s dazu auch noch spärlich information
cheers, silicon
|
silicon
Usernummer # 503
|
verfasst
bitte helfen, suche info´s über strptime ()... da gibt´s nur sowenig info im netz.
cheers, silicon
|
vlan23
Usernummer # 9572
|
verfasst
vielleicht wurde die funktion ersetzt weil sie zu unsicher ist wie z.B. strcpy
aus der manpage:
code:
NAME strptime - converts a character string to a time value
SYNOPSIS #include <time.h>
char * strptime(const char *buf, const char *format, struct tm *tm);
DESCRIPTION The strptime function converts the character string pointed to by buf to values which are stored in the ``tm'' structure pointed to by tm, using the format specified by format.
usw.
gib mal google: manpage strptime ein [ 20.08.2003, 18:23: Beitrag editiert von: vlan23 ]
|
Dj Toxic
Usernummer # 2471
|
verfasst
Hey sili,
ich müßte eigentlich noch irgendwo so nen Algorythmus rumzuliegen haben. Falls ich ihn finden sollte poste ich ihn - falls noch benötigt.
greetz, toxic
|
mind expander
Usernummer # 3159
|
verfasst
oder suche / poste mal in folgendem forum: http://www.codeguru.com/forum
ist ein stark frequentiertes forum, dort kann dir bestimmt jemand helfen.
|
silicon
Usernummer # 503
|
verfasst
@ mind_expander:
thx, aber die haben nix über c. zumindest nix passendes zu strptime
@vlan23:
weiß ich, aber ich weiß nicht wie ich da auf meine variablen zugreifen soll, mit den pointern etc. bzw. mit der struct tm... deswegen such ich ein beispiel.
cheers, silicon
|
Dj Toxic
Usernummer # 2471
|
verfasst
Hmm...hatten in nem Seminar mal nen ziemlich schicken Algorythmus für Datumsvergleiche geschrieben, aber leider ist er irgendwo in den Tiefen meines Schreibtisches verschollen. Sorry...
greetz, toxic
|
silicon
Usernummer # 503
|
verfasst
@Toxic:
C oder C++ ? Da gibt´s gravierende Unterschiede.
|
Dj Toxic
Usernummer # 2471
|
verfasst
Das war zwar ein C/C++ Seminar, aber den Algorythmus haben wir in C geschrieben. Brauchst doch nen Algo in C, oder?
greetz, toxic
|
silicon
Usernummer # 503
|
verfasst
@Toxic:
Naja, ich müsste wissen, wie ich das mit strptime und difftime hinbekomme, ohne das mein compiler mir irgendwelche warnings ausspuckt. hab das nicht so ganz drauf mit pointern und call-by-refernce in c. :-/
|
Dj Toxic
Usernummer # 2471
|
verfasst
Müßte mich auch erst wieder in die Matherie reinlesen.
Haste schonmal bei www.fachinformatiker.de ins Forum geschaut bzw. gepostet?
greetz, toxic
|
devnull
Usernummer # 5523
|
verfasst
Zitat: Ursprünglich geschrieben von: silicon: monat des eingegebenen datum
code:
p = datum + 3; (3 Stellen nach rechts, der Monat)
hmm wenn du die zuweisung machst, steht doch jetz "im" zeiger p "08.2003", und das gibt nur sinnloses zeug wenn du das mit atoi in nen integer umwandeln, du musst die einzelnen daten slicen, also nur die stelle 3 bis 5 "rauskopieren" das geht mit der funktion strncpy (string.h einbinden)! ich würde die vgl.funktion ungefähr so schreiben (ok vllt. bissl umständlich *g*) code:
char *s="20.08.2003"; char *datum="20.08.2003"; int check_date(char* today, char* date_to_check) { char t_day[3]="", t_month[3]="", t_year[5]="", check_day[3]="", check_month[3]="", check_year[5]=""; int day,month,year,c_day,c_month,c_year; strncpy(t_day, today,2); strncpy(t_month, today+3,2); strncpy(t_year, today+6,4); strncpy(check_day, date_to_check,2); strncpy(check_month, date_to_check+3,2); strncpy(check_year, date_to_check+6,4); day=atoi(t_day); month=atoi(t_month); year=atoi(t_year); c_day=atoi(check_day); c_month=atoi(check_month); c_year=atoi(check_year); if( (day!=c_day) && (month!=c_month) && (year!=c_year) ) return -1; return 1; }
|
Inkubator
Usernummer # 3755
|
verfasst
hi sili wenn du's noch brauchst dann kannst das mal versuchen:
code:
#include "stdafx.h" #include <string.h> #include <stdlib.h>
char pcToday[20] = {"20.08.2003/18:03:23"}; char pcDate[11] = {"20.08.2004"};
int main(int argc, char* argv[]) { // Declarations char pcTodayCat[20] = {""}; char pcDateCat[20] = {""};
// first, concat today strncpy(pcTodayCat, pcToday + 6, 4); strncpy(pcTodayCat + 4, pcToday + 3, 2); strncpy(pcTodayCat + 6, pcToday, 2); strcat(pcTodayCat + 8, "\n"); printf(pcTodayCat);
// the same with date strncpy(pcDateCat, pcDate + 6, 4); strncpy(pcDateCat + 4, pcDate + 3, 2); strncpy(pcDateCat + 6, pcDate, 2); strcat(pcDateCat + 8, "\n"); printf(pcDateCat);
// if date is lower than today if ( atoi(pcDateCat) < atoi(pcTodayCat) ) { printf("YIHAAAAA!!!\n"); return 1; } printf("MUUUHHH!!!\n"); return 0; }
einfach sinngemäss an deine bedürfnisse anpassen.
peace
|
|