Bitte um Kritik zu einer meiner C++ Library
-
@Cardiac sagte in Bitte um Kritik zu einer meiner C++ Library:
ein tag ist weder ein schaltjahr, noch interessiert es ihn welcher kalender grade genutzt wird.
Es gibt Autoren die behaupten ohne rot zu werden daß der Maya-Kalender am 11. August 3114 B.C. begonnen hat. Das ist ungefähr so, als würden die behaupten daß die Milchstraße ein Molkereiprodukt ist
MFG
-
Das ist das, was
Wikipedia sagtdie ersten 10 Treffer der google-Suche sagen. Auf einer Seite wurde erwähnt, dass sich Experten streiten, ob es der 11. oder 13. August ist, die Mehrheit scheint sich aber auf den 11. August geeinigt zu haben. Warum stimmt das nicht?Edit:
Hier ein online-Converter, bei dem sich die Korrelation einstellen lässt.
-
@DocShoe sagte in Bitte um Kritik zu einer meiner C++ Library:
Das ist das, was wikipedia sagt. Warum stimmt das nicht?
Weil zu einer Datierung stets die Angabe dazugehört welcher Kalender und welche Korrelation (zwischen verschiedenen Kalendern) verwendet wurde. Im Fall 11. August 3114 B.C. ist es so, daß sich dieses Datum mit der Goodmann-Martinez-Thompson-Korrelation und dem Gregorianischen Kalender ergibt. Wobei es den Gregorianischen Kalender gar erst seit Oktober 1582 A.D. gibt
Viele Grüße.
Quelle: J. Eric S. Thompson, Maya Hieroglyphic Writing, Oklahoma Press 1960
-
Anstatt eine eigene Kalender-Klasse zu erfinden, wäre mein allgemeiner Ratschlag, dass du, @_ro_ro, dir mal die C++-Funktionen aus
<chrono>
anschaust. Abgesehen von den üblichen Referenzseiten ist hier Howard Hinnant eine gute Quelle. Hinnant hat z.B. den Julianischen Kalender und den Islamischen Kalender implementiert. Siehe https://github.com/HowardHinnant/date
-
Mag sein. Unterdessen habe ich sehr gute Fachbücher betr. Kalenderberechnungen da stehen auch die Algorithmen drin, die ich in Perl, PHP, C, JavaScript und jetzt auch in C++ umgesetzt habe. Man muß sich einfach nur mal richtig damit befassen. Und ja, Kalenderberechnung, das schreit ganz laut nach OOP aber sowas von
Viele Grüße.
PS: in USA ist es üblich den Julianischen Kalender als Old Style und den Gregorianischen Kalender als New Style zu bezeichnen. Und vorchristliche Datierungen in New Style, WTF
-
-
@Helmut-Jakoby sagte in Bitte um Kritik zu einer meiner C++ Library:
Ja. Das wird ein Thema wenn Sie mit der Digitalkamera nach Mexico reisen. Und dann zuhause feststellen, daß alle Fotos offensichtlich mitten in der Nacht gemacht wurden
MFG
-
@DocShoe sagte in Bitte um Kritik zu einer meiner C++ Library:
Die kurze und höfliche Anwort: verbesserungswürdig.
Das ist geschmeichelt
Also der C-Style der da noch drinstekt ist grauenhaft. Da habe ich heute mal aufgeräumt. Allerdings habe ich noch nicht geprüft, inwieweit ich die(int)
Cast Notation c++konform ersetzen kann. Und als einen weiteren Vorteil von OOP betrachte ich den Fakt daß man in jeder Private Methode Vollzugriff auf die Eigenschaften der Instanz hat, also auf Return-Values und unendliche Argumentelisten weitgehend verzichten kann.MFG
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
@Helmut-Jakoby sagte in Bitte um Kritik zu einer meiner C++ Library:
Ja. Das wird ein Thema wenn Sie mit der Digitalkamera nach Mexico reisen. Und dann zuhause feststellen, daß alle Fotos offensichtlich mitten in der Nacht gemacht wurden
MFG
Sag mal, schaust du dir Videos überhaupt an, die dir freundlicherweise gegeben werden? Da geht es um Reinventing the wheel - und nicht um Digitalkameras, die nicht mal mit einem Netzwerk verbunden sind.
MfG
-
von Ihrer ausgesprochenen Höflichkeit mal abgesehen: Die Zeitzone (um die es in dem Video geht) spielt bei Datumsberechnungen und Kalkulationen zwischen Kalendern überhaupt gar keine Rolle. Das ist historisch begründet. Zeitzonen wurden viel später eingeführt als Kalender.
MFG
-
Die tiefgründigere Message des Videos ist (völlig korrekt): alles mit Datum ist kompliziert, man verwendet am besten gut gepflegte Bibliotheken. Wir haben eigenen Code für diverse Datumsumrechnungen (ich muss oft mit unterschiedlichen Wochendefinitionen arbeiten, wer braucht schon ISO-Kalenderwochen, wenn man Wochen auch von Mittwoch bis Dienstag oder Sonnabend bis Freitag definieren kann...) - und dieser Codeteil hat bei und in der Firma nicht nur die meisten Tests, sondern auch wirklich komische Spezialfallbugs (trotz der Tests) gehabt. In welcher Kalenderwoche bedingen wir uns - allein das ist auch schon so eine Spezialfrage, die von den Regeln abhängt und davon, wie man Wochen definiert... (4. Januar in KW1? Erster Donnerstag ist Jahr in KW1? Hahaha, alles viel zu einfach!)
Alles ein ganz großer Mist ist das!
Und dann finde mal für die GUI (da nutzen wir vuejs) irgendwelche Datepicker, die mit so komischen Wochen umgehen können...
-
@wob sagte in Bitte um Kritik zu einer meiner C++ Library:
Die tiefgründigere Message des Videos ist (völlig korrekt): alles mit Datum ist kompliziert, man verwendet am besten gut gepflegte Bibliotheken. Wir haben eigenen Code für diverse Datumsumrechnungen
Das beißt sich schon ein bischen: Gut gepflegte Bibliotheken <=> Eigener Code. Es sei denn, Du meinst damit gut gepflegte eigene Bibiotheken. Was ich völlig nachvollziehen kann
Alles ein ganz großer Mist ist das!
Nö. Man muß sich nur mal richtig damit befassen. Und: Am Einfachsten zu verstehen ist und bleibt der Maya-Kalender. Sämtliche Fragen der Korrelation zu Diesem mit Unstimmigkeiten von bis zu 1000 Jahren liegen nicht am Maya-Kalender sondern an der Unzulänglichkeit Europäischer Zeitrechnungen.
Viele Grüße!!
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
von Ihrer ausgesprochenen Höflichkeit mal abgesehen:
Ich war nicht unfreundlich...
Wollte lediglich schreiben, dass dein Vorhaben deine Kenntnisse bei Weitem übersteigt. Wie es die anderen ja auch schon getan haben... Falls du jetzt vor Wut tobst: Einfach 5 Minuten an die frische Luft.
-
Eingaben prüfen:
Ausgehend davon daß Benutzereingaben in HTML-Formularen grundsätzlich immer Strings sind, wäre da zunächst das Format zu prüfen, bspw.TT.MM.JJJJ
. Hierzu bemühe ich eine RegEx die auf Ziffern prüft womit ich letztendlich Tag, Monat und Jahr wiederum als Strings bekomme die ich anstoi
übergebe.Also irgendwie erscheint mit das unlogisch, daß eine RegEx auf Ziffern prüft
std::regex format("(\\d{1,2})\\.(\\d{1,2})\\.(-?\\d{1,4})"); std::regex_match(date, res, format); // Strings in res
aber Strings liefert. Wie auch immer, erst nachdem die Tag, Monat und Jahr numerisch vorliegen habe, kann ich prüfen ob das Datum valide ist und erst dann damit rechnen.
Wie macht Ihr das? Was wäre Eure Herangehensweise?
MFG
-
@_ro_ro sagte in Bitte um Kritik zu einer meiner C++ Library:
Eingaben prüfen:
Ausgehend davon daß Benutzereingaben in HTML-Formularen grundsätzlich immer Strings sind, wäre da zunächst das Format zu prüfen, bspw.TT.MM.JJJJ
. Hierzu bemühe ich eine RegEx [...] Wie auch immer, erst nachdem die Tag, Monat und Jahr numerisch vorliegen habe, kann ich prüfen ob das Datum valide ist und erst dann damit rechnen.Ich bin kein Web-Spezialist, aber meine Herangehensweise wäre, die Zeit im Browser parsen zu lassen, bevorzugt mit einer Methode, welche die Locale des Users berücksichtigt. Ich bin da echt kein Spezialist, aber ich glaube, dass
Date.parse
in JavaScript sowas macht. Du weisst, die Locale, die Datumsformate, Währungen, Uhrzeiten und andere Dinge mit all den verrückten Eigenheiten berücksichtigt, die solche Angaben haben können. VonTT.MM.JJJJ
überJJJJ-MM-TT
bis zu den völlig durchgeknallten Yanks mitTT/MM/JJJJ
. Das will man vielleicht nicht wirklich alles selbst in C++ implementieren.Wenn man dann ein
Date
-Objekt hat, liefert soweit ich seheDate.valueOf()
die Anzahl der Millisekunden seit dem 1. Januar 1970. Das ist m.E. eine schöne, generische Zeitpunkt-Angabe mit der man dann weiterarbeiten kann ohne sich um all die speziellen Formatierungen kümmern zu müssen. Das spart dann auch noch Serverlast, wenn man das kompliziertere Datums-Parsing auf den Client verlegt und auf dem Server nur noch prüfen muss, ob man einen gültigen Integer vorliegen hat. Umgekehrt geht das dann auch für die Anzeige auf der Website z.B. mitDate.toLocaleDateString()
.Das hat zwar den Nachteil, dass es JavaScript benötigt, aber den Vorteil, dass es am wenigsten überraschend für den User ist, da er die Daten genau so angezeigt bekommt und eingeben kann, wie er sein OS konfiguriert hat und es wahrscheinlich gewohnt ist. Das würde zumindest solche Verwirrungen vermeiden, wie ich sie öfter auf Websites habe wenn ich sowas wie
05/03/24
lese. Ist das der 3. Mai beknackten Ami-Format oder ist das z.B. australisch und es ist der 5. März gemeint?
-
Danke Dir. Nun, die Prüfung soll schon serverseitig erfolgen. Ich habe mich jetzt dazu entschlossen, anstatt wieder extern was zu bauen, meine Klasse um einen Konstruktor zu erweitern so daß bei der Objekterstellung direkt das Datum aus dem Eingebefeld übergeben wird:
Scaliger sca1( cgi.param("date1") );
also als Stringund alle Püfungen in der Klasse selbst erfolgen. Den Browser könnte man für eine Vorab-Prüfung heranziehen, aber
<input type="date">
erfordert wieder eine zusätzliche Formatumwandlung und das ist unschön, es rechtfertigt den Aufwand nicht.Viele Grüße!!