| |
VB.NET - Ein- und UmsteigerTipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: manuelhasi | Datum: 04.02.20 21:01 |
| Hallo zusammen...
leider hilft mir dieser Tipp unter vb.net nicht weiter, da er nicht funktioniert...
Was müsste hier geändert werden, damit die Funktion laufen würde bzw. kennt jemand einen anderen Weg, um alle Tage zwischen zwei Datumwerten zu ermitteln und auszugeben?
lg | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: Manfred X | Datum: 05.02.20 00:05 |
| Irgend so etwas vielleicht ....
Public Function Datumschleife(ByVal Datum_1 As Date, Datum_2 As Date,
Optional ByVal WTage As String = "") As String
Dim anzahltage As Long
Dim starttag As Date
Dim ergebnis As String
Dim einzeldatum As Date
Dim y As Long
Dim strTage As New System.Text.StringBuilder
' wenn keine zu zählenden Wochentage angegeben wurden
' alle Wochentage berücksichtigen
If WTage = "" Then WTage = "Mo;Di;Mi;Do;Fr;Sa;So"
' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
anzahltage = Microsoft.VisualBasic.DateDiff("D", Datum_1, Datum_2)
' Beginnen mit Datum1
starttag = Datum_1
For y = 0 To anzahltage
einzeldatum = Microsoft.VisualBasic.DateAdd("d", y, starttag)
ergebnis = Strings.Left(Strings.Format(einzeldatum, "dddd"), 2) &
", " & Strings.Format(einzeldatum, "dd.MM.yyyy")
'Beachte MM
' Prüfen, ob ermittelter Wochentag berücksichtigt
' werden soll
If InStr(WTage, Strings.Left$(ergebnis, 2)) > 0 Then
strTage.Append(ergebnis & ";")
End If
Next y
Return strTage.Remove(strTage.Length - 1, 1).ToString
End Function Anwendung:
Dim Datum1 As Date = CDate("13.08.2001")
Dim Datum2 As Date = CDate("29.08.2001")
Dim dt As String = Datumschleife(Datum1, Datum2, "Mo")
Beitrag wurde zuletzt am 05.02.20 um 00:32:25 editiert. | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: manuelhasi | Datum: 05.02.20 08:51 |
| vielen Dank für die schnelle Antwort
.. jetzt geht es...
Es ist doch immer wieder bemerkenswert, wie schnell ihr euch in gewisse Thematiken einlesen könnt und wie schnell ihr dann auch immer eine Lösung parat habt..
Auch wenn es hier nur "Kleinigkeiten" waren.
Vielen lieben Dank | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: manuelhasi | Datum: 05.02.20 09:37 |
| ne kleine Frage hätte ich aber noch..
ich würde gerne das Ergebnis nicht als string wiedergeben sondern jeden Tag einzeln als Item in einer Listview anzeigen? | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: HenryV | Datum: 05.02.20 09:54 |
| Ich hab es mir auch einmal angeschaut und es in Kombination mit Tipp Enumerationen als Bitfelder nutzen gelöst.
<Flags()>
Public Enum WT As Integer
Mo = 1 '0. Bit
Di = 2 '1 .Bit
Mi = 4 '2. Bit
[Do] = 8 '3. Bit
Fr = 16 '4. Bit
Sa = 32 '5. Bit
So = 64 '6. Bit
End Enum
Public Function Datumschleife(ByVal DateStart As Date, ByVal DateEnd As Date, _
Optional ByVal WTage As Integer = 127) As List(Of Dat
' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
Dim Days As Integer = DateEnd.Subtract(DateStart).Days + 1
Datumschleife = New List(Of Date)
For i As Integer = 0 To Days - 1
' Prüfen, ob ermittelter Wochentag berücksichtigt werden soll
Select Case True
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Monday AndAlso _
CBool(WTage And (1 << 0))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Tuesday AndAlso _
CBool(WTage And (1 << 1))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Wednesday AndAlso _
CBool(WTage And (1 << 2))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Thursday AndAlso _
CBool(WTage And (1 << 3))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Friday AndAlso _
CBool(WTage And (1 << 4))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Saturday AndAlso _
CBool(WTage And (1 << 5))
Datumschleife.Add(DateStart.AddDays(i))
Case DateStart.AddDays(i).DayOfWeek = DayOfWeek.Sunday AndAlso _
CBool(WTage And (1 << 6))
Datumschleife.Add(DateStart.AddDays(i))
End Select
Next
Return Datumschleife
End Function Anwendung:
Dim wts As Integer = WT.Mo Or WT.Di Or WT.Mi Or WT.Do Or WT.Fr
Dim l As List(Of Date) = Datumschleife(New Date(2020, 1, 1), Date.Today, wts)
For Each d As Date In l
ListView1.Items.Add(d.ToLongDateString)
Next | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: manuelhasi | Datum: 05.02.20 11:53 |
| Danke
für den Ursprungstipp von Manfred siehts dann so aus
Public Function Datumschleife(ByVal Datum_1 As Date, Datum_2 As Date, Optional _
ByVal WTage As String = "") As List(Of String)
Dim anzahltage As Long
Dim starttag As Date
Dim ergebnis As String
Dim einzeldatum As Date
Dim y As Long
Dim strTage As New System.Text.StringBuilder
Datumschleife = New List(Of String)
' wenn keine zu zählenden Wochentage angegeben wurden
' alle Wochentage berücksichtigen
If WTage = "" Then WTage = "Mo;Di;Mi;Do;Fr;Sa;So"
' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
anzahltage = Microsoft.VisualBasic.DateDiff("D", Datum_1, Datum_2)
' Beginnen mit Datum1
starttag = Datum_1
For y = 0 To anzahltage
einzeldatum = Microsoft.VisualBasic.DateAdd("d", y, starttag)
ergebnis = Strings.Left(Strings.Format(einzeldatum, "dddd"), 2) & "" & _
" " & Strings.Format(einzeldatum, "dd.MM.yy")
'Beachte MM
' Prüfen, ob ermittelter Wochentag berücksichtigt
' werden soll
If InStr(WTage, Strings.Left$(ergebnis, 2)) > 0 Then
strTage.Append(ergebnis & " ")
End If
Datumschleife.Add(ergebnis)
Next y
Return Datumschleife
End Function Aufruf
Dim l As List(Of String) = Datumschleife("10.02.20", "20.02.20", "")
For Each d As String In l
ListViewTerminübersicht.Items.Add(d)
Next | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: Manfred X | Datum: 05.02.20 20:12 |
| Vorsicht. Wenn Du den Wochentagefilter verwenden willst,
muss folgende Codezeile in die darüberstehende Bedingung:
Datumschleife.Add(ergebnis) | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: Manfred X | Datum: 05.02.20 20:44 |
| Hallo!
Mit "DayOfWeek" gibt es bereits eine Enumeration der Wochentage.
Als Funktions-Parameter kann man eine Liste oder ein Array dieser Werte
übergeben und in der Funktion prüfen, ob der Wochentag des aktuellen
Datums in dieser Liste enthalten ist.
Der Aufbau einer bitweise kombinierbaren Enumeration ist deshalb
eigentlich unnötig. | |
Re: Tipp 304: Alle Tage zweier Datumswerte ermitteln | | | Autor: HenryV | Datum: 07.02.20 08:41 |
| Da hast du natürlich Recht. Das macht die Sache auch viel einfacher.
Public Function Datumschleife(ByVal DateStart As Date, ByVal DateEnd As Date, _
Optional ByVal WTage As List(Of DayOfWeek) = Nothing) As List(Of Date)
' Anzahl Tage zwischen Datum1 und Datum2 ermitteln
Dim Days As Integer = DateEnd.Subtract(DateStart).Days + 1
Datumschleife = New List(Of Date)
For i As Integer = 0 To Days - 1
' Prüfen, ob ermittelter Wochentag berücksichtigt werden soll
' wenn keine zu zählenden Wochentage angegeben wurden
' werden alle Wochentage berücksichtigen
If WTage Is Nothing OrElse WTage.Contains(DateStart.AddDays( _
i).DayOfWeek) Then
Datumschleife.Add(DateStart.AddDays(i))
End If
Next
Return Datumschleife
End Function Dim wts As List(Of DayOfWeek) = New List(Of DayOfWeek) From {DayOfWeek.Monday, _
DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday}
Dim l As List(Of Date) = Datumschleife(New Date(2020, 1, 1), Date.Today, wts)
For Each d As Date In l
ListView1.Items.Add(d.ToLongDateString)
Next | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|