 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 10.05.2010, 23:08 Titel: Kalender Funktionen |
|
|
das ist jetzt ein nicht so ganz ernst gemeintes Projekt und deshalb sollte das auch nicht in den Vorstellungen landen...
Stübers "type lib" (übrigens Broken Link?), genauer seine fbdate.bi, hat mich dazu inspiriert.
Als reine Sub-Routinen Sammlung hatte ich das schonmal in Amiga/MaxonBASIC
realisiert und... es sah schon damals nicht gut aus.
In Erinnerung daran und entgegen
aller von Google/Wiki empfohlenen Kalenderberechnungsmethoden
hab ich mal nach gleicher Art ein paar Kalender-Funktionen in ein UDT gepresst.
Herausgekommen ist ein Jahres/Monats/TagesCounter übelster Sorte
Das Ganze ist wie eine "ZauberKiste" zu betrachten:
Mit..
->SetDateString("MM-DD-YYYY") stellt man die Kiste auf ein bestimmtes Datum ein
->SetDateStamp(Integerwert) springt man zu einem Tag der diesen Stamp hat(ohne das Datum zu kennen)
und mit...
->GetDateString bekommt man den DatumsString angezeigt
->GetDateStamp zeigt den TagesStamp an
->GetWeekDay zeigt die Wochentagsnummer zum eingestellten Datum/Stamp
->GetWeekDayName zeigt anstatt der WochentagsNummer direkt den Namen an
desweiteren...
->CheckDateString("MM-DD-YYYY") überprüft einen beliebigen und von oben unabhängigen DatumsString auf
korrekte Schreibweise und Plausibilität.liefert entsprechend 0/1.
Wer will kann ja mal ein wenig mit herumspielen, wird noch sehr verwanzt sein
DateBox.bi
das Demo:
Code: |
#include "DateBox.bi"
dim as DateBox ptr datum
datum=new DateBox
dim as integer ds
datum->SetDateString(date)'<---heute!!
print datum->GetDateString
ds=datum->GetDateStamp
print ds
print datum->GetWeekDay
print datum->GetWeekDayName
print
'Gegenprobe mit Hilfe des oben ermittelten DateStamps alle Informationen zum Folgetag
datum->SetDateStamp(ds+1)'<---morgen!!
print datum->GetDateString
print datum->GetDateStamp
print datum->GetWeekDay
print datum->GetWeekDayName
print
delete datum
sleep
end
|
Mutton |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 11.05.2010, 20:05 Titel: |
|
|
Hab den Quelltext kurz überflogen, sieht gut aus.
Allerdings hast du ein Datum von dem aus du rechnest, da finde ich die Methode die ich verwende schöner.
Code: | #define FBDATE_Jan 0
#define FBDATE_Feb 3
#define FBDATE_Mae 3
#define FBDATE_Apr 6
#define FBDATE_Mai 1
#define FBDATE_Jun 4
#define FBDATE_Jul 6
#define FBDATE_Aug 2
#define FBDATE_Sep 5
#define FBDATE_Okt 0
#define FBDATE_Nov 3
#define FBDATE_Dez 5
#define FBDATE_MONTAG 1
#define FBDATE_DIENSTAG 2
#define FBDATE_MITTWOCH 3
#define FBDATE_DONNERSTAG 4
#define FBDATE_FREITAG 5
#define FBDATE_SAMSTAG 6
#define FBDATE_SONNTAG 7
function FBDate.dayName() as integer
dim t as integer = getDay() mod 7
dim as string d2 = datum
d2 = mid(d2,9,2)
dim as integer j = val(d2)
j = (j + (val(d2) / 4)) mod 7
d2 = datum
d2 = mid(d2,7,2)
dim as integer jh = val(d2)
jh = (3 - jh mod 4) * 2
d2 = datum
d2 = mid(d2,1,2)
dim as integer m = val(d2)
dim sch as integer = 0
if m < 3 and (getYear() mod 4 = 0) then sch = -1
dim monat as integer = getMonth()
if monat = 1 then
monat = FBDATE_Jan
elseif monat = 2 then
monat= FBDATE_Feb
elseif monat = 3 then
monat= FBDATE_Mae
elseif monat = 4 then
monat= FBDATE_Apr
elseif monat = 5 then
monat= FBDATE_Mai
elseif monat = 6 then
monat= FBDATE_Jun
elseif monat = 7 then
monat= FBDATE_Jul
elseif monat = 8 then
monat= FBDATE_Aug
elseif monat = 9 then
monat= FBDATE_Sep
elseif monat = 10 then
monat= FBDATE_Okt
elseif monat = 11 then
monat= FBDATE_Nov
elseif monat = 12 then
monat= FBDATE_Dez
end if
dim as integer r = (sch + jh + j +t + monat) mod 7
if r = 0 then r = 7
return r
end function |
Das ist der Ausschnitt der interessant ist, der Rest liegt im NoPaste hier. Irgendwas ist an den Zeilenumbrüchen falsch, aber interessiert ja in dem Fall nicht. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.05.2010, 21:00 Titel: |
|
|
@elif: Bitte bitte Case. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|