Guten Morgen,
für meine Anwendung benötige ich eine Funktion, mit dieser ich den
genauen Wochentag ermitteln kann. Als Eingabe wird ein string übergeben:
1
char*Date="2023-03-20";
Im Netz habe ich schon die ein oder andere Funktion gefunden und auch
getstet. Leider waren diese Funktionen nicht korrekt, was die Ausgabe
betraf.
Gibt es eventuell hier im FOrum jemand der bereits so eine Funktion
schon entwickelt hat?
He S. schrieb:> Im Netz habe ich schon die ein oder andere Funktion gefunden und auch> getstet. Leider waren diese Funktionen nicht korrekt, was die Ausgabe> betraf.
Wenns bewährt und bereits getestet sein soll, dann kann man mal in den
Source-Code eines quelloffenen Linux-Betriebssystems reinschauen.
Mit den Funktionen aus <time.h> und etwas drum herum kann man das
machen.
Jahr, Monat, Tag mit sscanf aus dem String lesen.
struct tm füllen, in Epoch umwandeln mit mktime() und damit über
localtime() eine (jetzt richtig gefüllte) struct tm beschreiben.
Im Member tm_wday steht dann der Wochentag (Sonntag = 0)
Wenn man nur den Text braucht, geht dann auch gleich strftime()
He S. schrieb:> Im Netz habe ich schon die ein oder andere Funktion gefunden und auch> getstet. Leider waren diese Funktionen nicht korrekt, was die Ausgabe> betraf.
Für welchen Zeitraum brauchst du die Funktion.
Muss der Übergang von julianschen auf gregorianischen Kalender mit
abgedeckt werden?
Danke für das Beispiel. Ich habe mal die Funktion getestet. Ich erhalte
nicht den richtigen Wochentag. Ich habe die Funktion auch mal genauer
mit dem Debugger angeschaut. Der Monat ist immer Monath-1? Warum
eigentlich?
He S. schrieb:> Wenn ich "2023-03-12" eingebe erhalte ich den Wert 1 zurück. Ist aber> falsch müsste 7 sein => Sonntag
Vielleicht kannst du damit leben, dass Sonntag als 1 definiert ist.
Alternativ könntest du immer 5 dazuzählen und dann mit modulo(x,7)+1 auf
deine Darstellung umrechnen.
He S. schrieb:> erhalte ich den Wert 1 zurück. Ist aber falsch müsste 7 sein => Sonntag
Der Sonntag IST der 1. Tag in der Woche!
(Daniel 7,25)
Gruss Chregu
Christian M. schrieb:> Der Sonntag IST der 1. Tag in der Woche!> (Daniel 7,25)
Und Samstag war der sechste Tag (1.Mose 1:31) und Sonntag wurde
ausgeruht ...
Danke nochmals für eure Untersützung.
Ich habe allerdings noch ein Problem mit einer Konvertierung:
Ich möchte das Datum in einen string umwandeln für die weitere
Verarbeitung.
Dazu nutze ich die Funktion strftime:
Datum Zeit:
1
sec=30
2
min=59
3
hour=9
4
month_day=27
5
month=3
6
year=123
7
day_of_week=4
8
day_of_year117
9
time_zone=100663296
Nun soll mit Hilfe der Funktion strftime diese obigen Werete in ein
string umgewandlet werden:
1
charbuffer[10];
2
strftime(buffer,10,"%Y:%m:%d",&DateTime);
Im Buffer steht dann folgendes:
1
buffer[0]char50'2'0x20000780
2
buffer[1]char48'0'0x20000781
3
buffer[2]char50'2'0x20000782
4
buffer[3]char51'3'0x20000783
5
buffer[4]char58':'0x20000784
6
buffer[5]char48'0'0x20000785
7
buffer[6]char52'4'0x20000786
8
buffer[7]char58':'0x20000787
9
buffer[8]char50'2'0x20000788
10
buffer[9]char55'7'0x20000789
Das stimmt aber nicht. Der zweite Wert sollte nicht 4 sein sondern 3.
Ich habe mal die Gauss'sche Osterformel benutzt. Ein altes Foto vom
Ostersonntag, ohne Jahresangabe. Ein kleines Basic-Programm lieferte mir
die Hauptverdächtigen (Aus der Mode der abgebildeten Kleidung ließ es
sich etwa abschätzen).
https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel
da spielt noch der Vollmondtermin eine Rolle, das macht es etwas
komplizierter.
He S. schrieb:> Das stimmt aber nicht. Der zweite Wert sollte nicht 4 sein> sondern 3.He S. schrieb:> day_of_year 117
Der 117. Tag des Jahres paßt aber auch besser in den April, als in den
März.
Εrnst B. schrieb:> He S. schrieb:>> Das stimmt aber nicht. Der zweite Wert sollte nicht 4 sein sondern 3.>> Nochmal:>> Εrnst B. schrieb: struct tm {> int tm_sec; /* Seconds [0, 60] */> int tm_min; /* Minutes [0, 59] */> int tm_hour; /* Hour [0, 23] */> int tm_mday; /* Day of the month [1, 31] */> ....> };>
Kann nicht mal wer diese Info in ein Youtube-Video packen? Entsprechend
dem Niveau der "Programmierer" hier - denn schnödes Lesen ist ja so was
von altbacken ...