none
Datumsformat RRS feed

  • Frage

  • Hallo,

    ich habe eine Abfrage gegeben eine Datenbank und bekomme unter anderem ein Datum / Uhrzeit in diesem Format:

    02/05/2016 07:50:32

    Wie komme ich dieses Werte gewandelt, dass ich sie mit dem aktuellen Datum / Uhrzeit vergleichen kann? Oder kann ich einstellen das ich alle anfrage in einem bestimmten Format bekomme?

    Liebe Dank für eure Hilfe

    Norbert 


    IT Berater

    Montag, 8. Februar 2016 15:27

Antworten

  • Hi,

    du musst die Datumswerte vorher in DateTime konvertieren:

    $now = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    sleep -Seconds 10
    $gestern = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    $ts = [DateTime]$gestern - [DateTime]$now
    $ts

    Gruß

    Christian


    Christian Groebner MVP Forefront

    • Als Antwort markiert NBC2009 Mittwoch, 10. Februar 2016 17:10
    Mittwoch, 10. Februar 2016 16:48

Alle Antworten

  • Hallo Norbert,

    klar geht das, kleines Beispiel:

    $mydate = "02/05/2016 07:50:32"
    
    $yourdate = Get-Date $mydate -Format yyyy.MM.dd


    Ausgabe ist dann:
    2016.05.02

    https://technet.microsoft.com/en-us/library/hh849887.aspx

    Mit Uhrzeiten klappt das natürlich genauso.


    Montag, 8. Februar 2016 16:41
  • Hi Norbert,

    wenn Lennart schon geschrieben hat kannst du mit Get-Date und -Format das Datum verändern. Folgender Befehl würde das Format im US-Format ausgeben:

    $date = Get-Date -Format ("MM\/dd\/yyyy HH:mm")

    Es ist ggf. einfacher und schneller den Parameter-Wert zu wandeln als die Werte in der DB.

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Montag, 8. Februar 2016 17:57
  • Hallo Christian,

    vielen Dank, dass ist eine gute Idee. Vielleicht kannst du mir noch einen weiteren Tipp geben.

    Kurz zum Hintergrund. Ich möchte laufende Installationen überwachen. Zu diesem Zweck frage ich aus einer DB den Status verschiedener Installationspakete hab und schreibe das Ergebnis in eine HTML Datum so das jeder sich ganz einfach einen Überblick über laufende Installationen machen kann. Wenn ein Client fertig installiert wurde, oder ein Fehler aufgetreten ist, wird es entsprechend farblich angezeigt. Funktioniert prima. Als kleine Ergänzung möchte ich nun prüfen ob eine Installation stehen geblieben ist. Zu diesem Zweck frage ich das Installationsdatum den letzten Paketes ab. Nun möchte ich, wenn der Installationszeitpunkt älter wie eine Stunde ist, entsprechend reagieren.

    Im Prinzip muss jeder Wert des Datums (Jahr, Monat, Tag, Stunde) verglichen werden, oder? Kann PS dies in einem Schritt?

    Liebe Grüße

    Norbert

    

    IT Berater

    Mittwoch, 10. Februar 2016 08:07
  • Wenn du mit Get-Date das aktuelle Datum bestimmst, kannst du mit verschiedenen Add...-Methoden beliebige Zeitintervalle aufschlagen. So bekommt du mit 

    (Get-Date).AddHours(-1)
    den Zeitpunkt vor einer Stunde. Mit dem kannst du dann einfach deine anderen Daten vergleichen.
    Mittwoch, 10. Februar 2016 09:11
  • Danke für deine Antwort. Das alleine wird es aber nicht sein. Es können sich ja alle Werte ändern.

    Meine Frage bleibt, kann ich in einem Datum und Uhrzeit vergleichen?


    IT Berater

    Mittwoch, 10. Februar 2016 15:34
  • Hi,

    ja das geht. Hier mal ein Beispiel:

    $now = get-date
    $dbdate = # irgendwas aus der DB
    
    if ($now -lt $dbdate)
    {
    ... mach was
    }

    Gruß

    Christian


    Christian Groebner MVP Forefront


    Mittwoch, 10. Februar 2016 16:09
  • Hallo Christian,

    es wird unterschiedlich sein, der Punkt ist, ich möchte wissen wenn der Zeitunterschied größer 60 Minuten ist.

    Liebe Grüße

    Norbert 


    IT Berater

    Mittwoch, 10. Februar 2016 16:15
  • Hi,

    das geht mit einem TimeSpan:

    $now = Get-Date
    $gestern = $now.AddMinutes(120)
    $ts = $gestern - $now
    $ts
    
    Days              : 0
    Hours             : 2
    Minutes           : 0
    Seconds           : 0
    Milliseconds      : 0
    Ticks             : 72000000000
    TotalDays         : 0,0833333333333333
    TotalHours        : 2
    TotalMinutes      : 120
    TotalSeconds      : 7200
    TotalMilliseconds : 7200000
    

    Über den Wert TotalMinutes bekommst du dann heraus, wieviele Minuten unterschied sind.

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Mittwoch, 10. Februar 2016 16:24
  • $now = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    sleep -Seconds 10
    $gestern = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    $ts = $gestern - $now
    $ts
    Das wäre mein Wunsch, kann PS aber leider nicht.

    IT Berater

    Mittwoch, 10. Februar 2016 16:41
  • Hi,

    du musst die Datumswerte vorher in DateTime konvertieren:

    $now = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    sleep -Seconds 10
    $gestern = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    $ts = [DateTime]$gestern - [DateTime]$now
    $ts

    Gruß

    Christian


    Christian Groebner MVP Forefront

    • Als Antwort markiert NBC2009 Mittwoch, 10. Februar 2016 17:10
    Mittwoch, 10. Februar 2016 16:48
  • BINGO - vielen Dank und einen schönen Abend.

    IT Berater

    Mittwoch, 10. Februar 2016 17:10
  • Hi,

    du musst die Datumswerte vorher in DateTime konvertieren:

    $now = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    sleep -Seconds 10
    $gestern = Get-Date -Format ("MM\/dd\/yyyy HH:mm:ss")
    $ts = [DateTime]$gestern - [DateTime]$now
    $ts

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Also das verstehe ich nicht. Get-Date gibt doch standardmäßig ein DateTime-Objekt zurück. Mit dem -Format Parameter wird die Ausgabe intern in einen String umgewandelt. Warum soll man dann den String wieder in ein DateTime-Objekt umwandeln? Es reicht doch dann auch:

    $now = Get-Date
    sleep -Seconds 10
    $gestern = Get-Date
    $ts = $gestern - $now
    $ts

    bzw. um herauszufinden, ob $gestern mehr als eine Stunde vor $now liegt:

    if($gestern -lt $now.Addhours(-1)){...}
    Solange man das Datum nicht direkt irgendwie ausgeben will, sondern intern damit arbeitet, braucht man den -Format Parameter nicht.


    • Bearbeitet hpotsirhc Donnerstag, 11. Februar 2016 08:20
    Donnerstag, 11. Februar 2016 08:19
  • Hi,

    $foo = get-date -format "yyyy-MM-dd"
    $foo.GetType()
    
    IsPublic IsSerial Name      BaseType
    -------- -------- ----      --------
    True     True     String    System.Object
    
    
    

    Durch den Format-Parameter wird kein Datum, sondern ein String geliefert und deshalb kann man nicht beide Datumswerte so einfach voneinander abziehen. Das Codesnipsel macht so jetzt nicht unbedingt sinn, sich die Datumswerte im bestimmten String-Format abzuspeichern und dann anschließend zu konvertieren, da gebe ich dir recht. Das ist nur ein Ansatz zur lösung seines Problems.

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Donnerstag, 11. Februar 2016 08:26