Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung

...powered by haas.homelinux.net...

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 6 Strings und Datumsangaben
  gp 6.1 Verketten von Strings
  gp 6.2 Strings zerlegen
  gp 6.3 String und Format
  gp 6.4 Datumsfunktionen
  gp 6.5 Zusammenfassung


Galileo Computing

6.4 Datumsfunktionen  toptop

Ähnlich wichtig wie Stringfunktionen sind Datumsfunktionen. Angenommen, in einem Textfeld soll das heutige Datum als Vorgabedatum stehen. Dann können Sie folgende Eigenschaft verwenden:

System.DateTime.Today

Soll nun der Benutzer in ein Textfeld eine Datumsangabe eingeben, dann kann diese Angabe auf Richtigkeit überprüft werden mit:

IsDate(Me.txtDatum.Text)

Die Funktion liefert »True« oder »False«. Um ganz sicherzugehen, dass der Benutzer eine korrektes Datum eingegeben hat, sollten Sie eines der beiden Steuerelemente »DateTimePicker« oder »MonthCalendar« verwenden. Dies kann dann interessant sein, wenn das Programm die Datumsangaben weiterverarbeitet. Beachten Sie, dass das ausgewählte Datum des »DateTimePicker« mit der Eigenschaft »Value« herausgeholt wird.

Abbildung

Abbildung 6.13   Der MonthCalendar

Dagegen kann »MonthCalendar« zusammenhängende Datumsbereiche markieren. Sie werden mit »SelectionStart« und »SelectionEnd« gelesen oder geschrieben.

Allerdings sind beide Steuerelemente schwierig mit der Tastatur zu bedienen. Für die Benutzer, die viele Eingaben mit der Tastatur tätigen, bleibt dann doch nur das Textfeld.

Und mit der Eingabe kann weiter gearbeitet werden:

If IsDate(Me.txtDatum.Text) = False Then
   MessageBox.Shox("Bitte ein Datum eingeben")
   Me.txtDatum.Select()
Else
   Dim datDatum As Date
   datDatum = CType(Me.txtDatum.Text, Date)
   MessageBox.Show(datDatum.Year.ToString)
End If

Die Methode Year holt das Jahr heraus, Month den Monat, Day den Tag. DayOfWeek liefert als Zahl den Wochentag als Text. Interessanterweise liefert datDatum.DayOfWeek den Wochentag als Zahl, beginnend bei 1 für Montag, während datDatum.DayOfWeek den Wochentag als Text zurückgibt. Und natürlich könnte man aus der aktuellen Uhrzeit mit Hour und Minute die Uhrzeit herauslösen.

Abbildung

Abbildung 6.14   Das Datum wird zerlegt.

Dazu einige Beispiele. Gesucht ist die Anzahl der vergangenen Monate eines Geschäftsjahres. Das Geschäftsjahr fängt im April an, also aus 4 wird 1, aus 5 (Mai) wird 2, ... aus 12 (Dezember) wird 9, aus 1 (Januar) wird 10, ... und aus 3 wird 12.

Sub Geschäftsjahr1()
Dim datDatum as Date
Dim intMonat As Integer
Dim intAusgabeMonate As Integer
Dim strText As String

datDatum = Me.txtDatum.Text
intMonat = datDatum.Month
Select Case intMonat
   Case 1, 2, 3
      intAusgabeMonate = intMonat + 9
      strText = "Es sind " & intAusgabeMonate.ToString & _
         " Monate vergangen."
   Case 4
      intAusgabeMonate = intMonat - 3
      strText = "Es ist " & intAusgabeMonate.ToString & _
         " Monat vergangen."
   Case Else
      intAusgabeMonate = intMonat - 3
      strText = "Es sind " & intAusgabeMonate.ToString & _
         " Monate vergangen."
End Select

MessageBox.Show(strText)
End Sub

Es funktioniert auch anders. Es wird nun eine Variante gezeigt, die auch funktioniert:

Sub Geschäftsjahr2()
Dim datDatum as Date
Dim intMonat As Integer
Dim intAusgabeMonate As Integer
Dim strText As String

datDatum = Me.txtDatum.Text
intMonat = datDatum.Month
Select Case intMonat
   Case 1 To 3
      intAusgabeMonate = intMonat + 9
      strText = "Es sind " & intAusgabeMonate.ToString & _
         " Monate vergangen."
   Case 4
      intAusgabeMonate = intMonat - 3
      strText = "Es ist " & intAusgabeMonate.ToString & _
         " Monat vergangen."
   Case Is > 4
      intAusgabeMonate = intMonat - 3
      strText = "Es sind " & intAusgabeMonate.ToString & _
         " Monate vergangen."
End Select

MessageBox.Show(strText)
End Sub
Abbildung

Abbildung 6.15   Die vergangenen Monate des laufenden Geschäftsjahrs werden ermittelt (erneut 22.07.2002).

Der Benutzer soll in ein Textfeld sein Geburtsdatum eingeben. Daraufhin wird überprüft, ob er Geburtstag hat, was ihm über ein Meldungsfenster mitgeteilt wird:

Sub Geburtstag()
Dim datDatum As Date
Dim bytTag As Byte
Dim bytMonat As Byte
Dim intAnzTage As Integer

datDatum = Me.txtDatum.Text 

bytTag = datDatum.Day
bytMonat = datDatum.Month

If bytTag = DateTime.Today.Day And _
   bytMonat = DateTime.Today.Month Then
      MessageBox.Show("Happy Birthday")
Else
   datDatum = datDatum.AddYears(DateTime.Today.Year – _
      datDatum.Year)
   If datDatum < DateTime.Today Then 
      intAnzTage = 365 – _
         DateTime.Today.Subtract(datDatum).Days
   Else
      intAnzTage = datDatum. Subtract(DateTime.Today).Days
   End If
   MessageBox.Show("Du hast erst in " & _
   intAnzTage.ToString & _
   " Tagen Geburtstag.")
End If
End Sub
Abbildung

Abbildung 6.16   ... noch nicht ...

Die Variable datDatum wird vom Typ Date deklariert. Sie nimmt das Datum auf, das der Benutzer eingibt. Aus ihr werden die Informationen Day und Month herausgezogen und mit dem aktuellen Tag und dem aktuellen Monat verglichen. Nur wenn beide zugleich mit dem heutigen Tag und dem heutigen Monat übereinstimmen, hat der Benutzer Geburtstag. Year zu vergleichen, ist nicht nötig, – ja, ist sogar falsch, da das Geburtsjahr ein anderes ist als das aktuelle Jahr.

Hat der Benutzer heute nicht Geburtstag, so wird die Differenz der Jahre zwischen dem heutigen Jahr und dem Geburtsjahr ermittelt. Diese Zahl wird zur Jahreszahl des Geburtsdatums addiert. Damit wird der Tag im laufenden Jahr ermittelt, wann der Benutzer Geburtstag hatte oder haben wird. Also: Hat der User am 07.04.1964 Geburtstag und ist heute der 02.06.2002, so wird aus dem Geburtstag der 07.04.2002. Das heißt, der Benutzer hatte schon Geburtstag, was wiederum bedeutet, dass er 309 – (02.06.2002 – 07.04.2002) Tage warten muss. Hätte er am 02.07.1972 Geburtstag, so müsste er nur 30 (02.07.2002 – 02.06.2002) Tage warten. Diese Zahl wird ermittelt und angezeigt.

Hier die Liste der wichtigsten Datumsfunktionen einer Datumsvariablen:

Tabelle 6.3   Die wichtigsten Datumsfunktionen
Methode Bedeutung
Day ermittelt den Tag
Month ermittelt den Monat
Year ermittelt das Jahr
DayOfWeek ermittelt den Wochentag
AddDays addiert Tage zum Datum
AddMonth addiert Monate zum Datum
AddYears addiert Jahre zum Datum
Add addiert den angegebenen Wert zum Datum
Today das heutige Datum
Compare vergleicht zwei Datumsangaben und liefert –1, 0 oder 1
Subtract bildet die Differenz zweier Datumsangaben
ToLongDateString stellt das Datum in der langen Darstellung dar
ToShortDateString stellt das Datum in der kurzen Darstellung dar
ToString formatiert das Datum mit d, M, j. Dabei bedeuten beim 02.06.2002: d 2 dd 02 ddd Di dddd Dienstag M 6 MM 06 MMM Jul MMMM Juli yy 02 yyyy 2002 Beispiel: »dddd, dd. MMMM yyyy«

Das obere Beispiel kann also auch folgendermaßen mit der Methode ToString dargestellt werden:

MessageBox.Show("Das Jahr lautet:  " & _
datDatum.ToString("yyyy") & vbCr & _
"Der Monat lautet: " & datDatum.ToString("MM") & vbCr & _
"Der Tag lautet: " & datDatum.ToString("dd"))

Achten Sie dabei auf die Großschreibung von »M« für das Monatskennzeichen.

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML