Autor
|
Thema: C Algorithmus: Datumsvergleich
|
silicon
AErodynamic
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
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
mik
![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif)
Usernummer # 5095
|
verfasst
Das geht mit getdate():
Klick
Aus: Altendorf | Registriert: Feb 2002
| IP: [logged]
| |
|
|
nuc
Asra
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?
Aus: Wellington | Registriert: Jan 2002
| IP: [logged]
| |
|
|
silicon
AErodynamic
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
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
silicon
AErodynamic
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
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
PigFace
500
Usernummer # 4299
|
verfasst
Ist doch kein Problem, übergib halt ein vierstelliges Jahr (bzw. eine vierstellige String-Repräsentation der Jahreszahl) und es ist eindeutig.
Aus: Somewhere in the skeleton | Registriert: Nov 2001
| IP: [logged]
| |
|
|
silicon
AErodynamic
Usernummer # 503
|
verfasst
So, probier´s jetzt mit der Funktion strptime()...leider gibt´s dazu auch noch spärlich information
cheers, silicon
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
silicon
AErodynamic
Usernummer # 503
|
verfasst
bitte helfen, suche info´s über strptime ()... da gibt´s nur sowenig info im netz.
cheers, silicon
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
vlan23
![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif) ![](https://forum.technoforum.de/ubb/star5.gif)
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 ]
Aus: Berlin | Registriert: Jun 2003
| IP: [logged]
| |
|
|
down under
![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif)
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
Aus: München | Registriert: Apr 2001
| IP: [logged]
| |
|
|
|
silicon
AErodynamic
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
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
down under
![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif)
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
Aus: München | Registriert: Apr 2001
| IP: [logged]
| |
|
|
silicon
AErodynamic
Usernummer # 503
|
verfasst
@Toxic:
C oder C++ ? Da gibt´s gravierende Unterschiede.
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
down under
![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif)
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
Aus: München | Registriert: Apr 2001
| IP: [logged]
| |
|
|
silicon
AErodynamic
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. :-/
Aus: Universe | Registriert: May 2000
| IP: [logged]
| |
|
|
down under
![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif) ![](https://forum.technoforum.de/ubb/star7.gif)
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
Aus: München | Registriert: Apr 2001
| IP: [logged]
| |
|
|
devnull
![](https://forum.technoforum.de/ubb/star3.gif) ![](https://forum.technoforum.de/ubb/star3.gif)
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; }
Aus: Dresden | Registriert: Apr 2002
| IP: [logged]
| |
|
|
Inkubator
Biohazard
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
Aus: zürich | Registriert: Sep 2001
| IP: [logged]
| |
|
|
|