Hi,
ich habe eine Anwendung, die alle Files anzeigen soll, deren letzte Änderung vor einer bestimmten Anzahl von Minuten oder Stunden oder Tagen oder Monaten oder Jahren .
Dazu gebe ich ein
Ich runde das aktuelle Datum auf die jeweilige strUnit und subtrahiere dann den entsprechenden intValue ...
Ein Beispiel:
aktueller Timestamp: 17.06.2016 13:09:25, Auswahl: 5 DAYS
runden: 17.06.2016 00:00:00
subtrahieren: 12.06.2016 00:00:00
Hier ist mein Coding:
Die Routine gefällt mir nicht besonders gut. Erstens ist die Konvertierung in ein String Format mit nachfolgender Rückkonvertierung in das DateTime Format nicht gerade elegant.
Und zweitens stimmt die Routine für MONTHS und YEARS nicht, weil ich 30 Tage für einen Monat und 365 Tage für ein Jahr annehme.
Geht das irgendwie besser?
LG
Peter
ich habe eine Anwendung, die alle Files anzeigen soll, deren letzte Änderung vor einer bestimmten Anzahl von Minuten oder Stunden oder Tagen oder Monaten oder Jahren .
Dazu gebe ich ein
intValue
und strUnit
, z.B. 5 DAYS oder 7 Month. Ich runde das aktuelle Datum auf die jeweilige strUnit und subtrahiere dann den entsprechenden intValue ...
Ein Beispiel:
aktueller Timestamp: 17.06.2016 13:09:25, Auswahl: 5 DAYS
runden: 17.06.2016 00:00:00
subtrahieren: 12.06.2016 00:00:00
Hier ist mein Coding:
VB.NET-Quellcode
- Private Function SetDate(blnChecked As Boolean, strUnit As String, intValue As Decimal) As DateTime
- Dim retval As DateTime = CDate("01.01.1900") 'Default is low date
- If blnChecked Then
- retval = DateTime.Now 'Get current timestamp
- Select Case strUnit
- Case "MINUTES"
- Dim wDateTime As String = retval.ToString("yyyy.MM.dd HH:mm") 'Truncate SECONDS
- Dim TSpan As New TimeSpan(0, 0, CInt(intValue), 0) 'Convert specifies minutes
- retval = CDate(wDateTime) - TSpan 'Subtract specified minutes
- Case "HOURS"
- Dim wDateTime As String = retval.ToString("yyyy.MM.dd HH") 'Truncate MINUTES
- Dim TSpan As New TimeSpan(0, CInt(intValue), 0, 0) 'Convert to specified hours
- retval = CDate(wDateTime) - TSpan 'Subtract specified hours
- Case "DAYS" : retval = retval
- Dim wDateTime As String = retval.ToString("yyyy.MM.dd") 'Truncate HOURS
- Dim TSpan As New TimeSpan(CInt(intValue), 0, 0, 0)
- retval = CDate(wDateTime) - TSpan
- Case "MONTHS"
- Dim wDateTime As String = retval.ToString("yyyy.MM.01") 'Truncate DAYS (set day = 1)
- Dim TSpan As New TimeSpan(CInt(intValue) * 30, 0, 0, 0) 'Subtract specified months (30 days not correct)
- retval = CDate(wDateTime) - TSpan
- Case "YEARS"
- Dim wDateTime As String = retval.ToString("yyyy.01.01") 'Truncate MONTHS and DAYS (01.01.)
- Dim TSpan As New TimeSpan(CInt(intValue) * 365, 0, 0, 0) 'Subtract specified years (365 days not correct)
- retval = CDate(wDateTime) - TSpan
- End Select
- End If
- Return retval
- End Function
Die Routine gefällt mir nicht besonders gut. Erstens ist die Konvertierung in ein String Format mit nachfolgender Rückkonvertierung in das DateTime Format nicht gerade elegant.
Und zweitens stimmt die Routine für MONTHS und YEARS nicht, weil ich 30 Tage für einen Monat und 365 Tage für ein Jahr annehme.
Geht das irgendwie besser?
LG
Peter