Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich hab ein 2D String Array. In der ersten ersten Spalte steht ein Zeitstempel im String format, dahinter stehen noch andere Informationen.
Ich möchte das Array nach diesem Datum sortieren, dafür will ich den DateTime String in einen Zeitstempel und danach in eine Gleitkomma Zahl
convertieren damit ich über die Wertigkeit der conv. Zahl richtig sortieren kann. Leider bekomme ich keine vollständige Gleitkommazahl, sondern
einen Wert der wie folgt aussieht: 3,27938E+9 und wenn ich diesen wieder zurück convertiere bekomm ich ein falsches Datum.
Im grunde will ich nur wissen wie ich den Zeitstempel String ins Datumsformat und dannach in ne vollständige Gleitkommazahl convertiere und anschliessend
wieder zurück zu nem String Zeitstempel.
Bitte helft mir.
ciaole
Quintus
P.S benutze LabVIEW8.5
Die Starken Taten was sie konnten, die Schwachen litten was Sie mussten.
also zur umwandlung siehe bild 1
du musst den format string noch an dein datums format anpassen ...
in meinem beispiel issses YYYY-MM-DD und die zeit einfach dahinter im format HH:MMS
bild1:
zum sortieren einfach erst das datum umwandeln wie oben beschrieben .. dann als erstes element als cluster bundeln .. als zweites element eine Zeile aus dem 2D arraydas ganze in einer for schleife ... nach der schleife einfach mit "Sort 1D Array" das ganze sortieren ... danach eine zweite for scheife in der du mittels unbundel die array zeile wieder von der timestamp trennst und am ende wieder ein 2D Array erhgälst welches dann sortiert ist ... siehe bild .....
' schrieb:dafür will ich den DateTime String in einen Zeitstempel und danach in eine Gleitkomma Zahl
convertieren damit ich über die Wertigkeit der conv. Zahl richtig sortieren kann. Leider bekomme ich keine vollständige Gleitkommazahl, sondern
einen Wert der wie folgt aussieht: 3,27938E+9 und wenn ich diesen wieder zurück convertiere bekomm ich ein falsches Datum.
Interessant wär zu wissen, was du bisher machst...
Es gibt einen Thread, der ist nur ein paar Tage alt, da wird gezeigt wie der TimeDate-String in einen TimeStamp gewandelt wird...weiß grad aber nicht wo. Den Timestamp kannst du dann einfach mit einer der "numeric conversion"-Funktionen (z.b. "to DBL") in eine "richtige Zahl" umwandeln
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Zeitstring zu Zeitstempel (Den Formatstring mußt Du selbst anpassen, und die ms bei der Zeitstempel-Anzeige lassen sich unterdrücken):
Zeitstempel zu Double und zurück (mit kleinem Fehler, ein Tag hat 86400s und nicht 84600s)
Aber es geht auch beliebig viel umständlicher, wenn man die Funktionen die LV dafür bietet verschmäht...
@Achim "z.B double": Meines Wissen nach kann man einen Zeitstempel nur zu double konvertieren (oder vielleicht auch zu extented ?) , aber nicht zu anderen Zahlenformaten.
26.01.2008, 03:49 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2008 03:50 von rolfk.)
' schrieb:Zeitstring zu Zeitstempel (Den Formatstring mußt Du selbst anpassen, und die ms bei der Zeitstempel-Anzeige lassen sich unterdrücken):
[attachment=37886:ZeitStri...tstempel.png]
Zeitstempel zu Double und zurück (mit kleinem Fehler, ein Tag hat 86400s und nicht 84600s)
[attachment=37887:Zeitproblem.png]
Aber es geht auch beliebig viel umständlicher, wenn man die Funktionen die LV dafür bietet verschmäht...
@Achim "z.B double": Meines Wissen nach kann man einen Zeitstempel nur zu double konvertieren (oder vielleicht auch zu extented ?) , aber nicht zu anderen Zahlenformaten.
Nun single geht auch aber dann verlierst Du sehr viel Genauigkeit. Die Auflösung ist dann für einen aktuellen Zeitstempel weit grösser als einen Sekunde. unsigned int32 geht auch, dann hast Du natürlich keine fraktionellen Sekunden und der unsigned int32 läuft irgendwann mal in 2038 oder so über.
' schrieb:Nun single geht auch aber dann verlierst Du sehr viel Genauigkeit. Die Auflösung ist dann für einen aktuellen Zeitstempel weit grösser als einen Sekunde. unsigned int32 geht auch, dann hast Du natürlich keine fraktionellen Sekunden und der unsigned int32 läuft irgendwann mal in 2038 oder so über.
Das ist 1x richtig und 1x falsch. Allerdings kann man mit doppelter Konvertierung (s. Beispiel links unten) einen Zeitstempel zu jedem Zahlenformat hin vergewaltigen.
Das ist aber alles eine eher praxisferne Diskussion (- die ich zugegebenermaßen angestoßen habe -), denn die interne Darstellung eines Zeitstempels ist double, und ich sehe keinen vernünftigen Grund, einen Zeitstempel in ein anderes als dies Format zu konvertieren.
In vielen Fällen ist eine Konvertierung sogar überflüssig, man kann den Zeitstring so verwenden, als sei das Format DBL. Um zarte Gemüter nicht zu verwirren, habe ich in dem Beitrag weiter oben Konvertierungen verwendet, die eigentlich gar nicht nötig sind. So funktioniert es auch:
Man beachte, daß am Additionssymbol nicht einmal Konvertierungspunkte vorhanden sind! Der Zeitstempel verhält sich (hier, aber noch immer,) exakt wie das Format DBL.
28.01.2008, 08:51 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2008 09:00 von rolfk.)
' schrieb:Das ist 1x richtig und 1x falsch. Allerdings kann man mit doppelter Konvertierung (s. Beispiel links unten) einen Zeitstempel zu jedem Zahlenformat hin vergewaltigen.
[attachment=37890:Zeitstem...rtierung.png]
Was ist denn da 1x falsch? Stimmt Du kannst es nicht direkt konvertieren, aber davon war auch nie die Rede.
Zitat:Das ist aber alles eine eher praxisferne Diskussion (- die ich zugegebenermaßen angestoßen habe -), denn die interne Darstellung eines Zeitstempels ist double, und ich sehe keinen vernünftigen Grund, einen Zeitstempel in ein anderes als dies Format zu konvertieren.
In vielen Fällen ist eine Konvertierung sogar überflüssig, man kann den Zeitstring so verwenden, als sei das Format DBL. Um zarte Gemüter nicht zu verwirren, habe ich in dem Beitrag weiter oben Konvertierungen verwendet, die eigentlich gar nicht nötig sind. So funktioniert es auch:
[attachment=37891:Zeit_Tage.png]
Man beachte, daß am Additionssymbol nicht einmal Konvertierungspunkte vorhanden sind! Der Zeitstempel verhält sich (hier, aber noch immer,) exakt wie das Format DBL.
Nein, die interne Darstellung eines Zeitstempels in LabVIEW war ein Double in Version < 7.0 (und ein vorzeichenloser 32 Bit Integer vor 4.0 oder so). Seit 7.0 ist es ein fixed floating Point Value, mit einem 64 Bit vorzeichenbehaftetem Integer für die Sekunden und einem 64 Bit vorzeichenlosen Integer für die Sekundenbruchteile. Allerdings wurden vor 8.0 nur die ersten 32 Bit des Sekundenbruchteils verwendet!
Wer das ja möchte kann mal berechenen was für ein Zeitraum damit abgedeckt werden kann. Nur soviel, das ist mehr dann die moderne Physik dem Universum zutraut, sowohl im Makro als im Mikrobereich.
Und zu Deinem letzten Beispiel: Versuch das nicht mit zwei Zeitstempeln!
LabVIEW ist da sehr intelligent. Ein Zeitstempel ist ein absoluter Zeitpunkt, eine Double Zahl wird im Falle von Zeit als relative Zeit behandelt.
absolut + absolut => Fehler
absolut +/- relativ => geht, Zeitstempel, absolutes Zeit
absolut - absolut => geht, Double, relative Zeit
Multiplikation/Division geht nicht mit Zeitstempeln. Was ist das doppelte vom heutigen Tag?
ich möchte das Thema nochmal kurz aufgreifen.
Ich habe ebenfalls ein 2D-Array of String.
In der zweiten Spalte steht ein Datum z.B. 09.03.2016. Ich möchte die Zeilen jetzt nach diesem Datum sortieren.
Gibt es dafür auch noch eine andere Möglichkeit (evtl. einfachere), als diesen Datumsstring zunächst in eine Zahl zu konviertieren, das ganze zu sortieren und dann wieder in ein Datum umzuwandeln?
Gruß
TDO
09.03.2016, 08:38 (Dieser Beitrag wurde zuletzt bearbeitet: 09.03.2016 08:39 von GerdW.)
wenn dein Datumsstring das Format "YYYYMMDD" hätte, könntest du dein Array auch alphabetisch sortieren lassen.
Wenn das Datumsformat dagegen "DD.MM.YYYY" lautet, musst du wohl oder übel erst einmal umwandeln: entweder durch umwandeln in eine Zahl oder durch Umsortieren der Zeichen…