none
Dateidatum ohne Zeitangabe vergleichen RRS feed

  • Frage

  • Hallo Leute,

    ich benutze folgenden Code, um abzugleichen, ob sich die Datei am heutigen Datum verändert hat. So kann das allerdings nicht funktionieren, da die Zeitkomponente eine Rolle spielt. Soll sie aber nicht. Wie könnte man den Code abändern, damit nur das Datum eine Rolle spielt? Intuitiv würde ich es durch String.Split() mit dem Leerzeichen als Trenner, dann das jeweils erste Arrayelement machen, aber das erscheint mir als zu aufwendig. Geht's auch eleganter?

         private bool hasBatchBeenCalled() {
                try {
                    CultureInfo culture = new CultureInfo("de-DE");
                    DateTime localDate = DateTime.Now;
                    string dateToday = localDate.ToString(culture), frickeFile = PathForPictures + @"comon\errfilet.vor"; //PathForPictures enthält den Pfad zu daten$(I:)
                    if(File.Exists(frickeFile)) {
                        _logger.Debug("{0} exists in {1}", frickeFile, PathForPictures);
                        FileInfo fi = new FileInfo(frickeFile);
                        DateTime creationTime = fi.CreationTime;
                        DateTime accessTime = fi.LastAccessTime;
                        DateTime changeTime = fi.LastWriteTime;
                        string strCreationTime = creationTime.ToString(culture);
                        string strAccessTime = accessTime.ToString(culture);
                        string strChangeTime = changeTime.ToString(culture);
                        if(strCreationTime == dateToday || strAccessTime == dateToday || strChangeTime == dateToday) {
                            _logger.Debug("Modification date of {0} seems to be of todays date:{1}", frickeFile, dateToday);
    
                        } else {
                            _logger.Debug("Modification date of {0} doesn not seem of todays date:{1}", frickeFile, dateToday);
                        }
                    } else {
                        _logger.Debug("{0} doesn't exist in {1}", frickeFile, PathForPictures);
                    }
                } catch(Exception er) {
                    _logger.Error(er.Message + Environment.NewLine + er.ToString());
                }
                return true;
            }

    Uneleganter Weg:

    char[] delimiters = new char[] { ' '};
    string[] arrayOfDateToday = dateToday.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
    dateToday = arrayOfDateToday[0];
    .
    .
    .



    Dienstag, 25. Juni 2019 08:57

Antworten

  • Hi,

    if( fi.LastWriteTime >= DateTime.Today ) {
        ...
    }

    Datumswerte in Strings umzuwandeln um die dann irgendwie zu vergleichen ist wahrscheinlich so ziemlich die schlechteste Idee überhaupt^^

    Die DateTime Klasse bietet für deine Zwecke auch die Date Eigenschaft um nur das Datum ohne Uhrzeit abzurufen.

    if( fi.LastWriteTime.Date == DateTime.Today ) {
        ...
    }


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 25. Juni 2019 09:17
    Moderator
  • Hi,
    wie Stefan schon schrieb, geht das alles viel kürzer:

    …
                    CultureInfo culture = new CultureInfo("de-DE");
    		frickeFile = PathForPictures + @"comon\errfilet.vor"; //PathForPictures enthält den Pfad zu daten$(I:)
                    if(File.Exists(frickeFile)) {
                        _logger.Debug("{0} exists in {1}", frickeFile, PathForPictures);
                        FileInfo fi = new FileInfo(frickeFile);
                        if(fi.CreationTime.Date == DateTime.Now.Date || fi.LastAccessTime.Date == DateTime.Now.Date || fi.LastWriteTime.Date == DateTime.Now.Date) {
    ...


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Dienstag, 25. Juni 2019 09:40

Alle Antworten

  • Hi,

    if( fi.LastWriteTime >= DateTime.Today ) {
        ...
    }

    Datumswerte in Strings umzuwandeln um die dann irgendwie zu vergleichen ist wahrscheinlich so ziemlich die schlechteste Idee überhaupt^^

    Die DateTime Klasse bietet für deine Zwecke auch die Date Eigenschaft um nur das Datum ohne Uhrzeit abzurufen.

    if( fi.LastWriteTime.Date == DateTime.Today ) {
        ...
    }


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 25. Juni 2019 09:17
    Moderator
  • Hi,
    wie Stefan schon schrieb, geht das alles viel kürzer:

    …
                    CultureInfo culture = new CultureInfo("de-DE");
    		frickeFile = PathForPictures + @"comon\errfilet.vor"; //PathForPictures enthält den Pfad zu daten$(I:)
                    if(File.Exists(frickeFile)) {
                        _logger.Debug("{0} exists in {1}", frickeFile, PathForPictures);
                        FileInfo fi = new FileInfo(frickeFile);
                        if(fi.CreationTime.Date == DateTime.Now.Date || fi.LastAccessTime.Date == DateTime.Now.Date || fi.LastWriteTime.Date == DateTime.Now.Date) {
    ...


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Dienstag, 25. Juni 2019 09:40