Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 240895 (2331)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Datumsfunktion
Bernhard Künzel
| Datum:24.08.02 23:16 (b.kuenzel@chello.at) |
Hallo Profaner, habe eine bitte an euch, könntets ihr mir die untenstehende funktion auf richtigkeit testen, habe zwar über 50 tests durchgeführt, aber man weiss ja nie. Wer will kann sie natürlich auch für sich verwenden. Gruß Bernhard Def DB_DeltaTage(2) ABS(Sub(Add(Add(Sub(Int(Mul(If(GT(Val(Mid$($(1),5,2)),2),Val(Left$($(1),4)),\ Sub(Val(Left$($(1),4)),1)),365.25)),693975),\ Int(Mul(If(GT(Val(Mid$($(1),5,2)),2),Add(Val(Mid$($(1),5,2)),1),\ Add(Val(Mid$($(1),5,2)),13)),30.6))),Val(Right$($(1),2))-1),\ Add(Add(Sub(Int(Mul(If(GT(Val(Mid$($(2),5,2)),2),Val(Left$($(2),4)),\ Sub(Val(Left$($(2),4)),1)),365.25)),693975),\ Int(Mul(If(GT(Val(Mid$($(2),5,2)),2),Add(Val(Mid$($(2),5,2)),1),\ Add(Val(Mid$($(2),5,2)),13)),30.6))),Val(Right$($(2),2))-1))) 'Par 1= erstes Datum in Datenbankformat 'Par 2= zweites Datum in Datenbankformat 'Ergebnis: Die Tage zwischen den zwei Datums 'Aufrufbeispiel Print DB_DeltaTage("20020918","19980425") Print DB_DeltaTage("19950425",Date$(3))
Jörg Sellmeyer
| Datum:25.08.02 23:58 (joerse@gmx.de) |
Coooole Funktion ! Scheint hinzuhauen. Bisher im "normalen" Datumsbereich keine Probleme. Gruß Jörg
Bernhard Künzel
| Datum:25.08.02 23:57 (b.kuenzel@chello.at) |
Hallo Jörg, danke fürs testen anbei noch zwei funktionen für die bemühungen. Gruß Bernhard Def DB_DateWochentag$(1) ExtString$(%HInstance,Add(65511,\ MOD(Add(Add(Add(Sub(Div&(Sub(Mul(158,Val(Mid$($(1),5,2))),157),5),\ Mul(Add(Val(Mid$($(1),5,2)),1),GT(Val(Mid$($(1),5,2)),2))),\ AND(GT(Val(Mid$($(1),5,2)),2),XOR(XOR(Equ(MOD(Val(Left$($(1),4)),4),0),\ Equ(MOD(Val(Left$($(1),4)),100),0)),Equ(MOD(Val(Left$($(1),4)),400),0)))),\ Val(Right$($(1),2))),\ Sub(Add(Val(Left$($(1),4)),Add(Add(Sub(Div&(Val(Left$($(1),4)),4),\ Div&(Val(Left$($(1),4)),100)),Div&(Val(Left$($(1),4)),400)),6)),\ AND(GT(Val(Mid$($(1),5,2)),2),XOR(XOR(Equ(MOD(Val(Left$($(1),4)),4),0),\ Equ(MOD(Val(Left$($(1),4)),100),0)),Equ(MOD(Val(Left$($(1),4)),400),0))))),7))) 'Par 1= Datum in Datenbankformat 'Ergebnis: Wochentag Def DB_DrawDate$(2) Add$(Add$(Add$(If(%(2)=1,Add$(DB_DateWochentag$($(1))," , der "),""),\ Format$("0'. '",Val(Right$($(1),2)))),\ ExtString$(%HInstance,Add(65487,Val(Mid$($(1),5,2))))),Add$(" ",Left$($(1),4))) 'Par 1= Datum in Datenbankformat 'Par 2= bei 0--> Langform (z.B. "24. März 1998") ' 1--> Langform mit Tag (z.B. "Dienstag, der 24. März 1998")
Jörg Sellmeyer
| Datum:26.08.02 00:01 (joerse@gmx.de) |
Du meine Güte.. Nur mal so aus Neugier. Wie lange hast Du für die Funktion gebraucht ? Gruß Jörg
Bernhard Künzel
| Datum:26.08.02 01:06 (b.kuenzel@chello.at) |
Hallo Jörg, habe diese funktion als Procedur eigentlich schon seit 1986 noch unter Dos aus der Zeitschrift Computer persönlich von 1984 habe sie dann in laufe der zeit von DOS auf GFA-WinBasic umgeändert, dann fand ich in der Zeitschrift PC-Praxis vom Jänner 1994 noch weitere trixs zum verkürzen, mit der Profanversion ab 3.0 schrieb ich sie dann wieder neu um, und je nach syntaxerweiterung verkürzte ich die prozedur. Da ich jetzt gerade bei einer Zinzeszinsberechnung arbeitete, brauchte ich eben diese procedur als funktion zum einbau in die funktion der zinsformel. Habe dann 8 teilfunktionen wegen der übersichtlichkeit erstellt, und dann nach und nach in eine funktion eingebaut. Das war eigentlich in 3 stunden erledigt und habe dann noch ca 2 stunden mit der exeltabelle verglichen. Anmerkung: Fehlerabfrage für das richtige datum ist nicht eingebaut der datumbereich sollte von 1901 bis 2999 funktionieren Gruß Bernhard
Bernhard Künzel
| Datum:27.08.02 10:53 (b.kuenzel@chello.at) |
Hallo Jörg, bei der wochentagsfunktion ist leider ein fehler enthalten. Bei einem schaltjahr wird bereits zwischen 1. jänner und 28. februar das schaltjahr dazugerechnet. Anbei die neue funktion in der hoffnung ohne fehler !!!!!! Gruß Bernhard '// Def DB_DateWochentag$(1) ExtString$(%HInstance,Add(65511,\ MOD(Add(Int(Sub(Mul(Sub(Val(Left$($(1),4)),1),365.25),693975)),\ Add(Add(Sub(Div&(Sub(Mul(158,Val(Mid$($(1),5,2))),157),5),\ Mul(Add(Val(Mid$($(1),5,2)),1),GT(Val(Mid$($(1),5,2)),2))),\ AND(GT(Val(Mid$($(1),5,2)),2),XOR(XOR(Equ(MOD(Val(Left$($(1),4)),4),0),\ Equ(MOD(Val(Left$($(1),4)),100),0)),Equ(MOD(Val(Left$($(1),4)),400),0)))),\ Add(Val(Right$($(1),2)),1))),7))) 'Par 1= Datum in Datenbankformat 'Ergebnis: Wochentag
Roland G. Hülsmann
| Datum:27.08.02 11:36 (rgh-soft@t-online.de) |
Hallo, HUT AB vor diesen Funktionen! Eine so tief verschachtelte definierte Funktion habe ich selbst für meine Tests nicht geschrieben. So wird meine Datums-DLL ( http://www.profan2.de/download/datum.zip ) nahezu überflüssig. Diese enthält nahezu die gleichen Funktionen (Include-Datei 32 Bit):
    ' PROFAN²-Deklarationen für: PRFDAT32.DLL
    ' Profan-Datum DLL 2.0 (c) 1993-1998 by Roland G. Hülsmann
    '
    ' DToN(D&) : Umwandlung einmes Datums im Format JJJJMMTT (als LongInt)
    '            in das interne Datumsformat (Anzahl der Tage seit 1.1.1600)
    '            Ergebnis: LongInt. Bei -1 war das Datum ungültig.
    '            Funktioniert ab 01.01.1600 bis 31.12.3999
    ' Das interne Format wird für die folgenden Funktionen genutzt und ist ideal
    ' zum Rechnen
    '
    ' NToD(N&) : Umkehrfunktion zur vorhergehenden.
    ' DOW(N&)  : Ermittelt den Wochentag (1-7) eines Datums im internen Format ( 1 = Sonntag)
    ' Day(N&)  : Ermittelt die Tageszahl (1-31) eines Datums im internen Format
    ' Month(N&): Ermittelt die Monatszahl (1-12) eines Datums im internen Format
    ' Year(N&) : Ermittelt die Jahreszahl (1600-3999) eines Datums im internen Format

    DEF DToN(1)  !"PRFDAT32.DLL","DToN"
    DEF NToD(1)  !"PRFDAT32.DLL","NToD"
    DEF DOW(1)   !"PRFDAT32.DLL","DOW"
    DEF Day(1)   !"PRFDAT32.DLL","Day"
    DEF Month(1) !"PRFDAT32.DLL","Month"
    DEF Year(1)  !"PRFDAT32.DLL","Year"
Gruß Roland
Bernhard Künzel
| Datum:05.09.02 01:33 (b.kuenzel@chello.at) |
Hallo, Habe jetzt alle meine datumsproceduren als funktionen umgeändert es kann jetzt mit diesen funktionen in formeln gerechnet werden es ist auch eine funktion für die kat. beweglichen feiertage dabei und das alles ohne dll-datei falsche datumseingabe wird abgefangen gültiges datum ist zwischen 1.1.1901 und 31.12.2099 erforderliche profanversion ab 7.0 wegen zeichenlänge über 255 es ist auch ein kleines testprogramm zum testen der datumsfunktionen dabei wer interresse hat hat kann sie per email anfordern. Gruß Bernhard
Horst Horn
| Datum: 07.09.02 20:48 (info@web-treffpunkt.de) |
Hallo Bernhard Da kann man nur noch eines sagen: Der Kandidat hat 100 Punkte ! - Ein ganz tolles Teil ! CU horst

| Zurück zur Übersicht