Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kalender Funktionen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 10.05.2010, 23:08    Titel: Kalender Funktionen Antworten mit Zitat

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. zwinkern

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 lächeln

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 zwinkern


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 11.05.2010, 20:05    Titel: Antworten mit Zitat

Hab den Quelltext kurz überflogen, sieht gut aus. lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 11.05.2010, 21:00    Titel: Antworten mit Zitat

@elif: Bitte bitte Case.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz