Wochentag benötigt! [Gelöst]

Übersicht BlitzBasic BlitzPlus

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

MCocktail

Betreff: Wochentag benötigt! [Gelöst]

BeitragSa, Jan 05, 2013 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich brauche Wochentage für ein spezielles Programm(einen Kalender),
hab aber leider nichts(Funktionen) gefunden hat ihr eine Idee?

Danke fürs Antworten!
  • Zuletzt bearbeitet von MCocktail am So, Jan 06, 2013 17:36, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragSa, Jan 05, 2013 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau brauchst du? Für ein bestimmtes Datum den entsprechenden Wochentag?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragSa, Jan 05, 2013 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist ganz einfach....

du musst nur einen Unix-Timestamp haben oder erzeugen. Dann mod 7 und danach steht jedes Ergebniss für einen best. Wochentag.

Unix-Timestamps kriegt man über Betriebssystemfunktionen oder Internet oder man coded sie selbst

ich habe da mal ein BMax-Beispiel. Daraus kannst du sicherlich was in BB zaubern:
BlitzMax: [AUSKLAPPEN]
	Function JulianDays%(txt$)
Local d%,m%,y%,ErsterPunkt%,ZweiterPunkt%
ErsterPunkt=Instr(txt,".")
d=Int(Left(txt$,ErsterPunkt-1))
ZweiterPunkt=Instr(txt,".",ErsterPunkt+1)
m=Int(Mid(txt$,ErsterPunkt+1,ZweiterPunkt-ErsterPunkt-1))
y=Int(Mid(txt$,ZweiterPunkt+1,99))
If Y<2000 Then y=y+2000
Local jd%=(1461*(y+4800+(m-14)/12))/4+(367*(m-2-12*((m-14)/12)))/12-(3*((y+4900+(m-14)/12)/100))/4+d-32075
Return jd%
End Function
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Sa, Jan 05, 2013 16:27, insgesamt 2-mal bearbeitet
 

MCocktail

BeitragSa, Jan 05, 2013 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Holzchopf hat Folgendes geschrieben:
Was genau brauchst du? Für ein bestimmtes Datum den entsprechenden Wochentag?

Den Wochentag.
 

MCocktail

BeitragSa, Jan 05, 2013 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Omg verstehst du auch andere Sprachen? Ich verstehe BMax kein bisschen.

Midimaster

BeitragSa, Jan 05, 2013 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
naja,.. die Formel dürfte so gut wie keinen speziellen BMax Code enthalten. Möglicherweise läuft es sofort in BB los...

Vielleicht liest Du es erst mal durch?

Die Formel will einen Datumstring in der Form "DD.MM.JJJJ" jeweils mit Zahlen und gibt dir dann eine Zahl zurück.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

MCocktail

BeitragSa, Jan 05, 2013 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Midimaster hat Folgendes geschrieben:

Die Formel will einen Datumstring in der Form "DD.MM.JJJJ" jeweils mit Zahlen und gibt dir dann eine Zahl zurück.

Nun ja, eigentlich wollte ich den wochentag wissen.

Holzchopf

Meisterpacker

BeitragSa, Jan 05, 2013 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst aus der Zahl mittels Select- oder If-Statement den Wochentag machen.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragSa, Jan 05, 2013 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
also nochmal... die Funktion liefert für jedes Datum eine Zahl zurück. Wenn du diese Zahl jetzt

W= Zahl MOD 7

rechnest, dann ist W nur noch eine Zahl zwischen 0 und 6. Jedes dieser Ergebnisse steht dann für einen Wochentag
0=Mo
1=DI
2=Mi
...usw

BlitzBasic: [AUSKLAPPEN]
Zahl%= JulianDays("05.01.2013")
Print "Julian Days=" + Zahl
W%=Zahl Mod 7
Print "Wochentag als Zahl=" + W
Select W
Case 5
Print "Samstag"
EndSelect



Function JulianDays%(txt$)
Local d%,m%,y%,ErsterPunkt%,ZweiterPunkt%
ErsterPunkt=Instr(txt,".")
d=Int(Left(txt$,ErsterPunkt-1))
ZweiterPunkt=Instr(txt,".",ErsterPunkt+1)
m=Int(Mid(txt$,ErsterPunkt+1,ZweiterPunkt-ErsterPunkt-1))
y=Int(Mid(txt$,ZweiterPunkt+1,99))
If Y<2000 Then y=y+2000
Local jd%=(1461*(y+4800+(m-14)/12))/4+(367*(m-2-12*((m-14)/12)))/12-(3*((y+4900+(m-14)/12)/100))/4+d-32075
Return jd%
End Function
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

BtbN

BeitragSa, Jan 05, 2013 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
UnixZeit ist das aber nicht, denn das sind sekunden seit 1970, und das mod 7 wäre vieles, aber kein Wochentag.
 

MCocktail

BeitragSa, Jan 05, 2013 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso! Bin wohl ganz durcheinander. Embarassed Tut mir Leid!

Aber sonst,Danke! Very Happy
 

PhillipK

BeitragSa, Jan 05, 2013 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt. mir war so, als wäre das tatsächlich die falsche idee, mod 7 auf unixzeit zu verwenden.

Wenn ich grob überschlage, war der 1.1.1970 ein donnerstag, unixzeit müsste um 00:00 begonnen haben.
ergo:
Minuten =(Zeit / 60)
Stunden = (minuten / 60)
Tage = (stunden / 24)
Tag = (tage mod 7)
-> 0 = donnerstag, 1 = freitag, 2 = samstag, 3 = sonntag, 4 = montag, 5 = dienstag, 6 = mittwoch.

Oder irre ich mich da?

Midimaster

BeitragSa, Jan 05, 2013 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ja klar... wen er Unix nimmt, muss er erst noch nach "tage" runterrechnen.

Wenn er aber die kleine formel oben verwendet kann er bereits jetzt ein datum eingeben und so eine art "Julian"-Timestamp bekommen.

Im Grunde ist es ja egal, was man als Basis nimmt. Hauptsache es handelt sich um ein Zahl, die sich täglich um 1 erhöht.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

BladeRunner

Moderator

BeitragSa, Jan 05, 2013 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist korrekt, allerdings ist es ebenso korrekt dass Du ihm den UnixTimestamp empfohlen hast und dann den julianischen Kalender benutzt Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

MCocktail

BeitragSo, Jan 06, 2013 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Immerhin funktionierts, wenn ich zum ergebnis von JulianDays() 3 addiere dann hab ich dieses
0=Montag... Prinzip. Also: gelöst!

Midimaster

BeitragSo, Jan 06, 2013 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist ja seltsam....

wenn ich...
BlitzBasic: [AUSKLAPPEN]
Print  JulianDays("06.01.2013") Mod 7

...eingeben erhalte ich 6, also "Sonntag"

das wäre jetzt schon korrekt ohne dass man 3 dazuzählen muss...

seltsam!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

MCocktail

BeitragSo, Jan 06, 2013 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm wirklich seltsam denn bei mir geht es erst wenn man 3 dazuzählt... Confused

Midimaster

BeitragSo, Jan 06, 2013 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
welches datum?

formel kopiert? oder abgeschrieben?

vielleicht hast du verseherntlich noch im string 2012 stehen?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

MCocktail

BeitragDi, Jan 08, 2013 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
abgeschrieben und verändert:
BlitzBasic: [AUSKLAPPEN]

Function CreateTimestamp%();Creates Timestamp for CalculateWeekday()
Local d%,m%,y%

d=Int(Left(CurrentDate(),2))

Select Mid(CurrentDate(),3,3)
Case "Jan"
m=1
Case "Feb"
m=2
Case "Mar"
m=3
Case "Apr"
m=4
Case "May"
m=5
Case "Jun"
m=6
Case "Jul"
m=7
Case "Aug"
m=8
Case "Sep"
m=9
Case "Oct"
m=10
Case "Nov"
m=11
Case "Dec"
m=12
End Select

y=Int(Right(CurrentDate(),4))

If Y<2000 Then y=y+2000

Local jd%=(1461*(y+4800+(m-14)/12))/4+(367*(m-2-12*((m-14)/12)))/12-(3*((y+4900+(m-14)/12)/100))/4+d-32075
Return jd%+3; hier ist das drei dazuzählen.

End Function

Midimaster

BeitragMi, Jan 09, 2013 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
na, also ich seh den Fehler schon....

wirf mal ein paar DEBUGLOG ein. z.b.

print "IST DAS WIRKLICH JANUAR? m=" + m


Rolling Eyes

die schöne Funktion so zu zerstören. Mensch! Lösch die bloß schnell wieder hier raus, sonst übernimmt die jemand später mal so.

Fehler-Vermeiden-Tutorial:

Wenn eine Formel nicht so arbeitet wie erwartet, dann such den Fehler und bau nicht einen zweiten Fehler ein, bis es scheinbar wieder stimmt....

Die Original-Formel ist fehlerfrei und erwartet ein Datum in Form von DD.MM.JJJJ oder auch D.M.JJ. Hättest Du nur ein paar Tests mit verschiedenen Datums Wink gemacht...

So wäre es richtig:

Aus CurrentDate() einen gültigen String D.M.JJ mit einer eigenen Funktion erstellen. Diese neue Funktion prüfen, prüfen, prüfen...

Dann das Ergebniss an JulianDays() weiterreichen. Den ReturnWert an die Funktion WochenTag() senden. So geht Technik!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group