Benutzer mit den meisten Antworten
Datumsformat

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
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
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.- Bearbeitet Lennart Montag, 8. Februar 2016 16:42
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 9. Februar 2016 22:51
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 10. Februar 2016 14:17
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Mittwoch, 10. Februar 2016 14:18
-
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
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 9. Februar 2016 22:51
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 10. Februar 2016 14:17
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Mittwoch, 10. Februar 2016 14:18
-
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
-
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. -
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
- Bearbeitet Christian Groebner Mittwoch, 10. Februar 2016 16:10
-
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
-
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
-
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
-
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