Unixtime und Datumsfunktionen
-
Hallo!
Ich benutze den C++ Builder 5 und bin nun auf ein Problem gestossen.
Ich habe ein Datum X im Unixtime Format. Ausgehend von diesem Datum muss ich 2 Daten errechnen:
- der 1. Tag des vorhergehenden Monats
- der letzte Tag des vorhergehenden MonatsDabei sollen natürlich Schaltjahre und Jahreswechsel berücksichtig werden.
Praktisch soll das so aussehen:
X = 02.01.2006 (als unixtime)
1. Datum: 01.12.2005
2. Datum: 31.12.2005Leider komme ich mit den Funktionen von TDateTime nicht wirklich weiter.
Hat jemand ne Idee oder ein Codeschnippsel?
-
Ich weiß nicht, ob es beim BCB 5 schon dabei ist...
In der DateUtils gibt es die Funktionem
UnixToDateTime // konvertiert Unix-Datumsangaben DaysInMonth // gibt Anzahl der Tage im Monat -> letzter Tag im Monat IncMonth // zum 'Rechnen' mit Monaten
-
Hallo und Danke!
Aber leider gibts die Funktionen dort nicht! (Nur incmonth)
-
Also im BCB 6 geht es so:
TDateTime datum=UnixToDateTime(1138880060); TDateTime erster=StartOfTheMonth(IncMonth(datum,-1)); TDateTime letzter=EndOfTheMonth(IncMonth(datum,-1));Musst allerdings die DateUtils includen.
-
Das würde mich aber auch dringend interessieren, ich arbeite auch mit dem BCB 5.
Ausgehend von der Überlegung, das der Timestamp sich errechnet aus 01.01.1970 + Sekunden bis jetzt, könnte man sicherlich auch so einen TimeStamp in einer Funktion errechnen.
-
Ja schon, aber wie siehts mit den Schaltjahren aus?
-
#include <dos.h> class unixtime { private: unsigned long unixtime; struct date datum; struct time zeit; void lastmonth() { unixtodos(unixtime,&datum,&zeit); datum.da_mon--; if(!datum.da_mon) { datum.da_mon = 12; datum.da_year--; } } public: void set_unixtime(unsigned long unti) {unixtime=unti;lastmonth();} unixtime(unsigned long unti) {unixtime=unti;lastmonth();} TDateTime get_erster() { return EncodeDate(datum.da_year,datum.da_mon,1); } TDateTime get_letzter() { short months[12]={31,28,31,30,31,30,31,31,30,31,30,31}; return EncodeDate(datum.da_year,datum.da_mon,months[datum.da_mon-1]+isschaltjahr(datum.da_year)); } bool isschaltjahr(int iJahr) { if (!(iJahr%4)) { if (!(iJahr%100)) { if (!(iJahr%400)) return true; else return false; } else return true; } else return false; } };und dann
unsigned long uni=1206716131; unixtime letztermonat(uni); TDateTime erster = letztermonat.get_erstertag(); TDateTime letzter = letztermonat.get_letztertag();geht bestimmt noch schöner zu machen.

-
Wahnsinn!! Danke, genau das was ich gesucht habe.
