Forum: PC-Programmierung Konvertierung von Typen


von Ulrich (Gast)


Lesenswert?

Moin Moin zusammen,

ich bin gerade dabei einen Timer zu basteln damit ich immer weiß wann 
ich meine Arbeitsstunden voll habe.
Ich wollte als kleine Gadget eine progessbar einbauen.
Die Zeit die abgearbeitet wird soll später als Progessbar grafisch 
dargestellt werden. Hierfür nehme ich einfach die Zeit die als Counter 
runter läuft.

Leider haben ich extreme Probleme mit der Typenwandlung.
1
void myTimer_Tick(object sender, EventArgs e)                          Tick pro einzelen Tick 
2
{          
3
       Time();                                                             
4
5
       if ( zeiterfassung.isRunning )  
6
       {
7
       //Die noch zu arbeitende Zeitaktualisieren:
8
       txBox_Arbeitszeit.Text = zeiterfassung.Zeit.ToLongTimeString();
9
              
10
       progress_Countdown.Increment(1);
11
       }                  
12
}
13
14
public void progressbar()
15
{
16
       string timeForProgess = txBox_Arbeitszeit.Text;
17
       int time_progress = (int)Convert.ToInt64(timeForProgess);
18
19
       progress_Countdown.Minimum = 1;
20
       progress_Countdown.Maximum = time_progress;
21
22
       progress_Countdown.Value = 1;
23
}
Ich hoffe ich habe jetzt nix vergessen.
Aber mit diesem Ausschnitt des Programms schmiert alles ab mit einem 
Ausnahmefehler.
"Die Eingabenfolge hat das falsche Format.


Grüße

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Ulrich schrieb:
> Aber mit diesem Ausschnitt des Programms schmiert alles ab mit einem
> Ausnahmefehler.
> "Die Eingabenfolge hat das falsche Format.

man könnte ja auch mal eine Fehlerbehandlung einbauen! (Try Catch als 
Stichwort)

Der Fehler wird wohl hier passieren:

int time_progress = (int)Convert.ToInt64(timeForProgess);

was steht in timeForProgess wenn das Fehler kommt? (Ich will nicht 
wissen was du denkst was darin steht, sondern schau bitte mit dem 
Debugger nach was wirklich drin steht)

Vermutlich wird der text einfach noch Leer sein.

von Ulrich (Gast)


Lesenswert?

"" also Leer.

von Peter II (Gast)


Lesenswert?

Ulrich schrieb:
> "" also Leer.

und das willst du in ein int(64) wandeln - was soll das raumkomnen?

von Ulrich (Gast)


Lesenswert?

Hopla soll natürlich #
int time_progress = (int)Convert.ToInt16(timeForProgess);

sein... danke habe ich übersehen...

Das Problem mit if (txBox_Arbeitszeit.Text != "")
umgangen und es funktioniert auch.

Das letzte Problem ist, dass er erst bei ca. 2/3 des Balkens ist aber 
die Zeit schon abgelaufen.

von Karl H. (kbuchegg)


Lesenswert?

Ulrich schrieb:

> Das letzte Problem ist, dass er erst bei ca. 2/3 des Balkens ist aber
> die Zeit schon abgelaufen.


Das wundert mich nicht.
Das macht man auch nicht so, dass man
1
       progress_Countdown.Increment(1);
einen Inkrement macht, sondern man rechnet sich die Zahl aus, auf die 
sich der Progressbar einstellen soll.

Im einfachsten Fall macht man einfach eine Prozentrechnung. D.h. man 
definiert, dass die komplette aufzuwendende Arbeitszeit 100% sind und 
rechnet sich dann beim Timertick mit der aktuellen Zeit aus, wieviele 
Prozent davon schon erledigt sind. Auf diesen Wert wird dann auch der 
Progressbar eingestellt, der mit
1
       progress_Countdown.Minimum = 0;
2
       progress_Countdown.Maximum = 100;

auf eine Prozentanzeige eingerichtet wurde.

Vorteil: du bist unabhängig davon geworden, wie oft und in welchen 
Zeitabständen der Timer Tick tatsächlich kommt. Der Timertick ist dann 
einfach nur noch die 'Benachrichtigung' doch bitte wieder mal den 
Progressbar auf den aktuellen Wert einzustellen. Welcher das ist, 
rechnet man anhand der aktuellen Zeit und der Startzeit bzw. der 
vorhergesagten Zeitdauer aus.

: Bearbeitet durch User
von Ulrich (Gast)


Lesenswert?

Moin moin zusammen,

ich habe das Problem mit der Leiste gelöst und es funktioniert super 
danke.
Aber ich stehe erneut auf dem Schlauch. Ich muss sagen, ich programmiere 
C# auch erst seit ein paar Wochen, also Frischfleisch...
1
private void ankunft_ValueChanged(object sender, EventArgs e)
2
{
3
      
4
        TimeSpan neue_zeit = 
5
        new TimeSpan(0, ankunft.Value.Hour, ankunft.Value.Minute);
6
7
        string date1 = DateTime.Now.ToShortTimeString();
8
9
  if (date1 != "")
10
  {
11
    int date1_int = Convert.ToInt16(date1);
12
    int neue_zeit_int = Convert.ToInt16(neue_zeit);
13
    }
14
  }
15
}
Es geht gerade darum dass ich eine Zeit in den Valvue Change Fenster 
eintragen kann, wann ich auf Arbeit angekommen bin. z.B um 7:15Uhr somit 
7:15.
Das funkioniert auch gut. Jetzt geht es weiter mit der aktuellen Zeit. 
Diese muss ich ja davon abziehen und das Ergebnis ausgeben, dann weiß 
ich ja wieviel Stunden ich gearbeitet habe und kann diese mit der Soll 
Arbeitszeit abgelichen und ausgeben.

Ich habe jedoch das Problem, dass ich die Zeiten nicht voneinander 
abgezogen bekommen, da ich die Zeiten im String direkt mit subtract 
nicht voneinander abgezogen bekomme des weiteren kann ich auch die 
strings nicht in einen int. convertieren da ich einen Ausnahmefehler 
bekomme.

Könntet Ihr mir ein weiteres mal eine Gedankenstütze geben?

Grüße

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Ulrich schrieb:
> Könntet Ihr mir ein weiteres mal eine Gedankenstütze geben?

du musst den String erst mal Teilen. Dann Stunden und Minuten in eine 
Zahl umwandeln und dann das ganze in ein TimeObjekt.

Dafür könnte man mit Regulären ausdrücken arbeiten oder mit Split.

von Steffen R. (steffen_rose)


Lesenswert?

Ulrich schrieb:
> Ich habe jedoch das Problem, dass ich die Zeiten nicht voneinander
> abgezogen bekommen

Warum rechnest Du nicht gleich mit den Ticks? Die Umwandlung in einen 
String macht ja nur für die Darstellung einen Sinn.

: Bearbeitet durch User
von Ulrich (Gast)


Lesenswert?

1
// Echtzeit holen für den Split
2
  string date1 = DateTime.Now.ToShortTimeString();
3
  // Zeit der ankunft abholen um damit zu rechnen
4
  TimeSpan neue_zeit = 
5
        new TimeSpan(0, ankunft.Value.Hour, ankunft.Value.Minute);
6
7
  string[] split = date1.Split(new char[] {':'});
8
  string str_stunden = split[0];
9
  string str_minuten = split[1];
Das hat super funktioniert danke!

Jetzt habe ich noch eine Frage.
Ich habe jetzt 3 Zeiten.

Einmal die Zeit wann ich komme, die Zeit die aktuell ist und die Zeit 
wieviel Stunden ich arbeiten muss.

Gibt es da schon fertige funktionen bzw. Formeln?
Weil das auszurechnen ist ja nicht all zu einfach.
Vor allem ist mir aufgefallen, dass ich ja ab 60 Minuten um 1 hochzählen 
muss und auch eine Auswertung brauche also %60 usw.

Grüße

: Bearbeitet durch User
von Arc N. (arc)


Lesenswert?

Peter II schrieb:
> Ulrich schrieb:
>> Könntet Ihr mir ein weiteres mal eine Gedankenstütze geben?
>
> du musst den String erst mal Teilen. Dann Stunden und Minuten in eine
> Zahl umwandeln und dann das ganze in ein TimeObjekt.
>
> Dafür könnte man mit Regulären ausdrücken arbeiten oder mit Split.

RegEx für xx:yy? Etwas viel Overkill

Zum eigentlichen Problem des TO:
Wenn Ankunftszeit und Endzeit beide über einen DateTimePicker 
dargestellt/eingelesen werden (vielleicht noch Format auf Custom und 
CustomFormat auf H:mm eingestellt), dann liefert Value jeweils ein 
DateTime-Objekt. Die Zeitspanne lässt sich daraus mit
TimeSpan ts = ende.Value - ankunft.Value; berechnen.
Mit z.B. string stundenMinuten = ts.Format(@"hh\:mm"); kann dann ein 
String zum Anzeigen erzeugt werden

http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.customformat(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/1905yhe2(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/dd992632(v=vs.110).aspx

von Peter II (Gast)


Lesenswert?

Arc Net schrieb:
> RegEx für xx:yy? Etwas viel Overkill

naja, der nächste gibt aber 12:a5, oder 12:12:10 ein und schon gibt es 
wieder eine Fehlermeldung. Bei RegEx kann man gleich Prüfen ob der 
String den richtigen Aufbau hat.

^(\d){1,2}:(\d){2,2}$

von Arc N. (arc)


Lesenswert?

Ulrich schrieb:
> Jetzt habe ich noch eine Frage.
> Ich habe jetzt 3 Zeiten.
>
> Einmal die Zeit wann ich komme, die Zeit die aktuell ist und die Zeit
> wieviel Stunden ich arbeiten muss.

TimeSpan arbeitszeit = new TimeSpan(8, 30, 0); // 8 Stunden und 30 
Minuten
DateTime ankunft = new DateTime(2014, 6, 24, 15, 3, 0);
DateTime ende = ankunft + arbeitszeit;

von Karl H. (kbuchegg)


Lesenswert?

Ulrich schrieb:

> Gibt es da schon fertige funktionen bzw. Formeln?
> Weil das auszurechnen ist ja nicht all zu einfach.
> Vor allem ist mir aufgefallen, dass ich ja ab 60 Minuten um 1 hochzählen
> muss und auch eine Auswertung brauche also %60 usw.


ArcNext hat den Rest ja schon addressiert.
Du gehst, der Himmel weiß warum, viel zu schnell auf Strings.
Strings sind nicht das, was du willst, wenn du mit Zeiten rummachen 
musst.

Du hast einen Satz Klassen, die mit Zeiten und Zeiträumen umgehen 
können. Du willst daher möglichst lange bei diesen Klassen bleiben um 
damit alle Berechnungen zu machen.

Erst ganz zum Schluss, wenn es darum geht eine Ausgabe zu machen, dann 
ist der Zeitpunkt gekommen, auf Strings zu wechseln.

Welchen Sinn soll es haben
1
  string date1 = DateTime.Now.ToShortTimeString();
2
  // Zeit der ankunft abholen um damit zu rechnen
3
4
  string[] split = date1.Split(new char[] {':'});
5
  string str_stunden = split[0];
6
  string str_minuten = split[1];
sich von einem DateTime Objekt die Zeit als String zu holen, nur um dann 
den String in Stunden und Minuten zu zerlegen. So ein DateTime Objekt 
wird ja wohl in der Lage sein, die Stunden bereits in Zahlenform zu 
liefern. Und tatsächlich gibt es eine Methode Hour() die genau das kann.

Aber abgesehen davon.
> Vor allem ist mir aufgefallen, dass ich ja ab 60 Minuten um 1
> hochzählen muss und auch eine Auswertung brauche also %60 usw.

Falls du je in die Verlegenheit kommst, in einer Programmiersprache eben 
keine entsprechenden vorgefertigten Klassen zur Verfügung zu haben:
Du kannst dir in solchen Fällen das Leben wesentlich einfacher machen, 
in dem du Zeiten eben nicht in Form von Stunden und Minuten ausdrückst, 
sondern zum Beispiel als 'Minuten seit Mitternacht'. Dann fallen dir 
nämlich all die ganzen Sonderfälle, die du beim Weiterschalten von 
Stunden hast (bis auf eine Ausnahme) alle weg. Du rechnest einfach immer 
in Minuten seit Mitternacht und zu Anzeigezwecken wandelst du dir 
wieder alles in die gewohnten Stunden und Minuten zurück. Die eine 
Ausnahme, die etwas Sorgfalt erfordert ist, wenn Startzeit + Dauer eine 
Endzeit ergibt, die 'nach Mitternacht' ergibt, bzw. wenn eine 
Differenzzeit ebenfalls über Mitternacht geht. Da muss man ein wenig 
aufpassen.

Dein Fehler ist, dass du immer von dem ausgehst, was du an der 
Oberfläche siehst. Kein Mensch sagt aber, dass du nur deswegen, weil du 
an der GUI Stunden und Minuten anzeigst, auch intern alles in Stunden 
und Minuten handhaben musst. Du musst deine Anzeige von den Innereien 
deines Programmes stärker trennen! Im Inneren deines Programmes benutzt 
du das, was für die Programmlogik am einfachsten ist. An der GUI benutzt 
du das, was für den Benutzer das Einfachste ist. Diese beiden Dinge sind 
des öfteren schon mal identisch, müssen es aber nicht notwendigerweise 
sein. Es genügt völlig, wenn man die eine Darstellung in die andere 
verwandeln kann (und vice versa). Wenn du in einem Programm für den 
amerikanischen Markt nicht mit Meilen, Füssen, Inch und weiß der Teufel 
was es da noch für Einheiten gibt rummachen willst, dann rechnet man 
programmintern lediglich mit einer einzigen Basiseinheit und wandelt das 
nur zu Anzeigezwecke in Meilen und Füsse um.

: Bearbeitet durch User
von Ulrich (Gast)


Lesenswert?

Guten Morgen,

vielen Dank für die Hilfe!
Ziemlich viel Information am frühen Morgen.

Ich werde mal versuchen das in die Tat um zu setzten.
Ich lasse euch wissen, wenn ich es geschafft habe.

von Ulrich (Gast)


Lesenswert?

1
private void ankunft_ValueChanged(object sender, EventArgs e)
2
{
3
  TimeSpan ankunft_time = 
4
        new TimeSpan(ankunft.Value.Hour, ankunft.Value.Minute, 0);
5
  TimeSpan arbeitzeit = 
6
        new TimeSpan(zu_arbeiten.Value.Hour, zu_arbeiten.Value.Minute, 0);
7
8
        DateTime myDateTime = DateTime.Now;
9
10
  TimeSpan my_Resultat_Time = (ankunft_time + arbeitzeit);
11
        txBox_zeit_Feierabend.Text = my_Resultat_Time.ToString();
12
13
  DateTime diff_Time = my_Resultat_Time.Subtract(myDateTime);
14
}
Das funktioniert soweit super. Ich habe jetzt nur noch ein Problem.
1
DateTime diff_Time = my_Resultat_Time.Subtract(myDateTime);

Die Zeilte bringt einen Fehler. Ich kann das nicht voneinander abziehen. 
Wenn ich die es drehe --> also DateTime von TimeSpan abziehen geht, 
andersrum nicht.
Wo habe ich den Fehler eingebaut?

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Ulrich schrieb:
> DateTime diff_Time = my_Resultat_Time.Subtract(myDateTime);
> Wo habe ich den Fehler eingebaut?

Wie soll das denn gehen.

my_Resultat_Time ist eine Zeitspanne, davon kann man keine Zeit 
abziehen!

5min - 12Uhr ergibt nun mal keinen sinn.

von Ulrich (Gast)


Lesenswert?

Wie rechne ich das dann aus? Aus einem Ergebnis bekomme ich immer ein 
TimeSpan und dann habe ich ja immer die differenz. Aber ich brauch diese 
ja um weiter zu rechnen.

Grüße

von Peter II (Gast)


Lesenswert?

Ulrich schrieb:
> Wie rechne ich das dann aus?

eventuell etwas selber denken?

wenn 5min - 12Uhr  nicht geht, dann kann man doch wohl 12Uhr - 5min 
rechnen oder sogar 12Uhr + 5min wenn man es andersrum braucht.

von Ulrich (Gast)


Lesenswert?

Ja das habe ich schon probiert... nicht nur einmal :D

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ulrich schrieb:
> Ja das habe ich schon probiert

Auch wenn Probieren über Studieren geht hilft in der Programmierung oft 
nur LESEN (der API) und LERNEN das ist hier doch kein Quizduell...

Auch eine grobe Struktur über den Ablauf sich zu überlegen (auf toten 
Bäumen...) hat schon manchem geholfen. Und mit "Konvertierung von Typen" 
hat das wilde zusammenwerfen unterschiedlichster Datenstrukturen 
eigentlich auch nix zu tun...

von Karl H. (kbuchegg)


Lesenswert?

Ulrich schrieb:
>
1
> private void ankunft_ValueChanged(object sender, EventArgs e)
2
> {
3
>   TimeSpan ankunft_time =
4
>         new TimeSpan(ankunft.Value.Hour, ankunft.Value.Minute, 0);
5
>   TimeSpan arbeitzeit =
6
>         new TimeSpan(zu_arbeiten.Value.Hour, zu_arbeiten.Value.Minute, 
7
> 0);
8
> 
9
>         DateTime myDateTime = DateTime.Now;
10
> 
11
>   TimeSpan my_Resultat_Time = (ankunft_time + arbeitzeit);
12
>         txBox_zeit_Feierabend.Text = my_Resultat_Time.ToString();
13
> 
14
>   DateTime diff_Time = my_Resultat_Time.Subtract(myDateTime);
15
> }
16
>

Das ist nicht logisch.

Ein DateTime Objekt bezeichnet einen Zeitpunkt (wann ist etwas passiert)
Ein TimeSpan Objekt bezeichnet eine Zeitdauer (wie lange hat etwas 
gedauert)

Und jetzt überlegen wir mal, was was ist.
Ist eine Ankunftszeit ein bestimmter Zeitpunkt oder ist es eine 
Zeitdauer?

Eine Ankunftszeit ist klarerweise ein Zeitpunkt. Vorher warst du noch 
nicht da, dann bist du angekommen und danach bist du da. Ein genau 
definierter Zeitpunkt. D.h. das sollte ein DateTime Objekt sein.

In der letzten Zeile rechnest du eine diff_Time aus. Gedacht ist das 
offenbar als die Differenz zweier Zeitpunkte.
Ist so eine Differenz ein Zeitpunkt oder ist das eine Zeitdauer?
Na offenbar ist das ja eine Zeitdauer. Um 11 Uhr hast du angefangen und 
um 12 Uhr 30 warst du fertig. Die Differenz davon sind 1 einhalb 
Stunden. Etwas das eine Aussage darüber macht, wie lange etwas dauert 
ist eine Zeitdauer und kein Zeitpunkt. Also muss das ein TimeSpan Objekt 
sein.


Fazit: Benutze die Klassen so, wie sie gedacht sind und in der 
Bedeutung, die sie haben. Dann wird alles andere, unter anderem auch was 
du von wem abziehen oder dazuzählen kannst, logisch sinnvoll.
Nur weil es bei beiden Klassen um Stunden und Minuten geht, bedeutet das 
nicht, dass du die wahllos durcheinander würfeln kannst, wie es dir 
gerade in den Kram passt. Die Macher der Klassen haben sich schon etwas 
dabei gedacht, damit man eben nicht Kraut und Rüben durcheinder würfelt 
und hinterher unsinnige Ergebnisse erhält, selbst wenn man das alles 
arithmetisch rechnen kann. Aber ein wenig mitdenken, welche Bedeutung 
der Wert hat den du gerade ausrechnest und zu welcher Kategrie 
(Zeitpunkt oder Zeitdauer) er gehört, musst du schon selber. Selbst wenn 
die Klassendesigner versucht haben, möglichst viele Fehler dadurch 
abzufangen, dass dir der Compiler die Operation verweigert. " Zeitpunkte 
voneinander abzuziehen ist eine sinnvolle Operation. Das Ergebnis ist 
die Zeitdauer zwischen diesen Zeitpunkten. Aber 2 Zeitpunkte zu addieren 
ist keine sinnvolle Operation. Was soll das Ergebnis davon sein?
Wohl aber ist es eine sinnvolle Operation, zu einem Zeitpunkt eine 
Zeitdauer zu addieren oder zu subtrahieren. Das Ergebnis ist dann der 
Zeitpunkt, der um die angegebene Zeitdauer in der Zukunft oder in der 
Vergangenheit liegt.

Wenn du im weiteren Code durcheinander kommst, dann benenne deine 
Variablen so, dass du bereits in der Variablenbenennung eine klare 
UNterscheidung zwischen Zeitpunkten und Zeitdauern hast. Zb, in dem du 
das eine mit dem Postfx '_Zeit' versiehst und das andere mit dem Postfix 
'_Dauer'.
Dann steht dann eben im Code
1
    End_Zeit = Ankunfts_Zeit + Arbeits_Dauer;
(bzw. die entsprechenden Aufrufe der Member-Funktionen)
und das sieht jede Kind, dass das eine sinnvolle Operation ist. 
Wohingegen
1
    Pause_Zeit = Ankunfts_Zeit + KloGeh_Zeit
nicht sinnvoll sein kann, weil bei der Addition von 2 Zeitpunkten kein 
physikalisch sinnvolles Ergebnis entsteht. Dann muss man eben 
entscheiden, wo man den Schnitzer eingebaut hat. Hat man grundsätzlich 
etwas falsch gerechnet oder hat man sich in der Bezeichnung (und damit 
auch in der Wahl der Objekt-Klasse) vertan und sollte die KloGeh_Zeit in 
Wirklichkeit nicht eigentlich die Zeit-Dauer sein, die vergeht, wie 
lange man es im Büro aushält bis man das erste mal aufs Klo muss. Beides 
sind mögliche Fehlerszenarien und als Programmierer musst du 
entscheiden, welcher der beiden Fälle tatsächlich vorliegt und wie daher 
die Änderung sein muss. Eine klare, konsistente Benennung von Variablen 
kann dabei sehr hilfreich sein. Dies zu erkennen gehört genauso zum 
Lern-Prozess dazu, der aus einem Nichtprogrammierer einen Programmierer 
und in letzter Konsequenz einen Programmierprofi macht.

Wenn dir bis jetzt immer noch nicht klar geworden ist, was das Problem 
ist, dann geh mal eine Stufe höher. Weg von Stunden und Minuten und hin 
zu Tag/Monat/Jahr. Denn ein Teil des Problems besteht darin, dass wir 
sowohl für Zeitpunkte als auch für Zeitdauern dieselben Einheiten 
benutzen. Für beides benutzen wir Stunde(n), Minute(n) und Sekunde(n). 
Bei Datümern ist das aber ein klein wenig anders. Das eine benennen wir 
mit Tag/Monat/Jahr, während wir für das andere 'Tage' benutzen (auch 
wenn der sprachliche Unterschied nur minimal ist)
Ein bestimtes Datum ist eine bestimmter Tag im Jahr. Der 25. Juni 2014 
ist so ein Tag. Ein ganz betimmter aus vielen. Im Kontrast dazu steht 
die ANzahl von Tagen zwischen 2 Daten. Bis zum 1. Juli sind es noch 6 
Tage. Das ist eine Zeitdauer! "Tag/Monat/Jahr" ist ein Punkt, "Tage" ist 
eine Dauer. Man kann die Differenz zwischen 2 Datümer berechnen und 
kriegt die Dauer dazwischen. Aber man kann nicht 2 Datümer addieren. Was 
soll das für ein Ergebnis sein? Was kriege ich, wenn ich zum 25. Juni 
den 3. August dazuzähle? Welche reale Bedeutung könnte dieses Ergebnis 
haben? Eben - keine. Wohl aber kann ich 2 Zeitdauern voneinander 
abziehen und addieren. Wenn der Bau eines Rohbaus 8 Tage dauert und der 
Installateur zum Verlegen der Rohre 2 Tage braucht, dann ist nach 8 + 2 
gleich 10 Tagen der Rohbau samt Rohren fertig. Das ist also eine 
Sinnvolle Operation. Genauso wie es eine sinnvolle Operation ist zum 25. 
Juni diese 10 Tage zu addieren um so den Tag im Kalender zu kriegen, an 
dem Rohbau+Rohre fertig sind.


Also: einfach mal ein wenig nachdenken, was die Bedeutung von Klassen 
ist, was sie darstellen, und was sich daraus für die Verwendbarkeit 
ergibt.
In der Programmierung muss man ein wenig genauer hinsehen als im 
täglichen Leben, bei dem das Gehirn des Gesprächsparnters viele der 
Unlogikkeiten, Zweideutigkeiten und Widersprüche wieder ausgleicht, die 
wir tagtäglich so von uns geben.

: Bearbeitet durch User
von Ulrich (Gast)


Lesenswert?

Guten Morgen,

vielen Dank für die Hilfe.
Auch wenn manche vielleicht nicht so begeistert sind von Leuten die 
dumme Fragen stellen, weil sie nicht mehr weiter wissen.

Aber es hat am Ende alles funktioniert... und verstanden habe ich durch 
eure Hilfe

Thanks!

von Denis (Gast)


Lesenswert?

solltest noch die Zeiten abziehen, die Du für die Implementierung von 
Spielerein benötigt hast ;)

von Georg (Gast)


Lesenswert?

Karl Heinz schrieb:
> Das eine benennen wir
> mit Tag/Monat/Jahr, während wir für das andere 'Tage' benutzen

In der Praxis stimmt das so nicht, was man schon an der Aussage "ich bin 
30 Jahre alt" sieht. Aber beim Programmieren ist es zweckmässig, das so 
zu machen, eine von mir verwendete Datenbank stellte dazu die Funktion 
"Julianday" zur Verfügung, die die Anzahl der Tage ab einem historischen 
Datum liefert (welches ist eigentlich egal) als long integer, damit kann 
man dann bequem rechnen und bei Bedarf das Ergebnis auch wieder in ein 
Datum verwandeln. 30 Tage Zahlungsziel ist also kein Problem, aber 10 
Jahre Mietdauer auch nicht. Die meisten Computersysteme arbeiten nach 
dem gleichen Prinzip, siehe Unix.

Meiner Erinnerung nach gibt es irgendwo eine allumfassende Library zur 
Datumsberechnung mit allen Verrücktheiten wie gregorianische 
Kalenderreform, Jahr Null usw., damit kann man angeblich jedes Datum 
berechnen, auch einen Wochentag 10000 v.C. oder Tage römisch ab urbe 
condita oder im Mayakalender (besonders für Esoteriker). Aber sowas 
sollte man nur auf sich nehmen wenn man es unbedingt braucht.

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.