[GELÖST] Erstellen eines Zeitstempels schluckt Sekunden

26. Januar 2015 19:45

Hi all,
ich hab jetzt so lange gesucht und gesucht, aber ich finde die Lösung nicht, dabei kann das doch nicht so schwer sein.
Ich habe folgende Variablen:
Datum = Date
Zeit = Zeit
lTimestamp = DateTime

Nun versuche ich aus Datum und Zeit einen Zeitstempel zu kreieren:

Code:
Datum:=BDEDaten.Datum;
Zeit:=BDEDaten.Zeit;
EVALUATE(lTimestamp,STRSUBSTNO('%1 %2',
                                FORMAT(Datum, 0, '<Day,2>.<Month,2>.<Year4>'),
                                FORMAT(Zeit,0,'<Hour,2>:<Minute,2>:<Second,2>')));


Obwohl meine Zeitvariable noch Sekunden hat und ich das im Format ja auch explizit mit angebe, erhalte ich bei lTimestamp keine Sekunden.
Hat jemand einen Tipp für mich? Ich stehe gerade auf dem Schlauch :roll:
Zuletzt geändert von DaggiLiehr am 29. Januar 2015 12:20, insgesamt 1-mal geändert.

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

26. Januar 2015 21:05

Dafür gibt es andere Anweisungen.
Createdatetime
https://msdn.microsoft.com/de-de/library/dd338859(v=nav.70).aspx
Currentdatetime für den aktuellen Zeitpunkt
https://msdn.microsoft.com/de-de/library/dd355371(v=nav.70).aspx

Falls dein Avatar keine Eigenkreation ist, bitte durch einen copyrightfreien ersetzen oder löschen.

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 13:33

Hallo Kai,
Danke für den Tip. Mit CreateDateTime habe ich es zuerst versucht, aber auch hier fehlen die Sekunden.

Und zum Avatar: Natürlich ist das ein eigenes Avatar :-)

LG,
Daggi

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 13:45

DaggiLiehr hat geschrieben:Mit CreateDateTime habe ich es zuerst versucht, aber auch hier fehlen die Sekunden.
Zeig uns mal bitte deinen Quelltext, insbesondere womit du überprüfst, ob Sekunden enthalten sind oder nicht.
Nutze zur Kontrolle besser
Code:
MESSAGE(FORMAT(DeineNunGefüllteDateTimeVariable));

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 15:48

Hier meine Variablen:
Code:
Name   DataType   Length   Subtype
BDEDaten   Record      BDE Daten
Datum   Date      
Zeit   Time      
lTimestamp1   DateTime      
lTimestamp2   DateTime      
lTimestamp3   DateTime      


Und Hier der Code:
Code:

OnRun()
BDEDaten.RESET;
BDEDaten.SETRANGE(BDEDaten.Maschine,'SDF1');
IF BDEDaten.FINDLAST THEN;
Datum:=BDEDaten.Datum;
Zeit:=BDEDaten.Zeit;
EVALUATE(lTimestamp1,FORMAT(Datum)+' '+FORMAT(Zeit));
EVALUATE(lTimestamp2,STRSUBSTNO('%1 %2',
                                FORMAT(Datum, 0, '<Day,2>.<Month,2>.<Year4>'),
                                FORMAT(Zeit,0,'<Hour,2>:<Minute,2>:<Second,2>')));

lTimestamp3:=CREATEDATETIME(Datum,Zeit);
MESSAGE('Datum:     %1\Zeit:          %2\Stempel1: %3\Stempel2: %4\Stempel3: %5',
         FORMAT(Datum),
         FORMAT(Zeit),
         FORMAT(lTimestamp1),
         FORMAT(lTimestamp2),
         FORMAT(lTimestamp3));


Und das Ergebnis sieht man im Dateianhang.
Egal, wie ich den Zeitstempel erstelle, das Ergebnis schluckt die Sekunden :-(
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 16:07

Hm, tatsächlich liefert ein bloßes
Code:
MESSAGE(FORMAT(CURRENTDATETIME));

auch bei mir (NAV 2009 R2) ein
27.01.15 14:56


Dagegen liefert ein
Code:
MESSAGE(FORMAT(TIME));

die Uhrzeit mit Sekunden.

Konvertiere ich einen DateTime in einen Time und gebe den Time aus
Code:
MESSAGE(FORMAT(DT2TIME(CURRENTDATETIME)));

dann sind die Sekunden ebenfalls drin.

Das heißt, im DateTime sind die Sekunden sehr wohl enthalten (was wir ja vorausgesetzt haben), sie werden aber bei einem bloßen FORMAT ohne Parameter nicht dargestellt.

Wie also kriegen wir einer DateTime-Variable die Sekunden dargestellt?
Eigentlich hast du es schon richtig gemacht. Dein Format-Beispiel in einer Zeile funktioniert bei mir, zeigt also auch die Sekunden:
Code:
MESSAGE(FORMAT(CURRENTDATETIME,0,'<Day,2>.<Month,2>.<Year4> <Hour,2>:<Minute,2>:<Second,2>'));


Nutze bitte kein EVALUATE, sondern wie von kowa vorgeschlagen, die Funktion CREATEDATETIME zum Erstellen der DateTime-Variable.

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 16:15

Das liegt daran das die STANDARD Format Ausgabe bei DATETIME keine Sekunden ausgibt, somit formatierst du bei der MESSAGE die Sekunden raus. :wink:

Genau deswegen gibt der folgende Code auch keine Sekunden aus.
Code:
MESSAGE(FORMAT(CURRENTDATETIME));


Siehe NAV Hilfe (Standard bei FORMAT 0)
DateTime Format Example
<Day,2>-<Month,2>-<Year> <Hours24>.<Minutes,2>
0
05-04-03 4.35


<Day,2>-<Month,2>-<Year> <Hours24>.<Minutes,2>.<Seconds,2><Second dec>
1
05-04-03 4.35.55.553

<Day,2>-<Month,2>-<Year> <Hours24>.<Minutes,2>
2
05-04-03 4.35

<Day,2>-<Month,2>-<Year> <Hours24>.<Minutes,2>.<Seconds,2>
3
05-04-03 4.35.55

XML format
9
2003-04-05T03:35:55.553Z


Wenn du das Standard Format 3 nimmst, dann hast du dein Ergebnis auch in der MESSAGE.
(bei Standard Format 1 sogar mit 1000stel Sekunden.)

Code:
MESSAGE('Datum:     %1\Zeit:          %2\Stempel1: %3\Stempel2: %4\Stempel3: %5',
FORMAT(Datum),
FORMAT(Zeit),
FORMAT(lTimestamp1,0,'<Standard Format,3>'),
FORMAT(lTimestamp2,0,'<Standard Format,3>'),
FORMAT(lTimestamp3,0,'<Standard Format,3>'));


mfg,
winfy

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 18:29

Ok, das klappt jetzt wunderbar mit der Message. :-)
Dazu noch eine Frage: Wenn ich den Wert in ein Tabellenfeld speichere, bleiben die Sekunden dort auch enthalten, auch wenn diese so nicht angezeigt werden?

Ich kann es gerade nicht ausprobieren, kann ich aber morgen machen.

LG und Danke an alle,
Daggi

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

27. Januar 2015 18:46

DaggiLiehr hat geschrieben:Dazu noch eine Frage: Wenn ich den Wert in ein Tabellenfeld speichere, bleiben die Sekunden dort auch enthalten, auch wenn diese so nicht angezeigt werden?
Ja, versprochen :-)

Wird deine Datenbank nur in Deutschland verwendet? DateTime-Tabellenfelder speichern die Zeit nämlich in UTC ab. Dies hat zur Folge, dass z.B. ein amerikanischer Kollege (weil andere Zeitzone als du) da eine andere Uhrzeit als du sehen würde. Das gibt es nur bei DateTime-Feldern, nicht bei Time. Wollte ich nur zur Sicherheit noch loswerden ;-)

Re: Beim Erstellen eines Zeitstempels fehlen die Sekunden

29. Januar 2015 12:19

Hi Natalie,
zum Glück arbeitet meine Datenbank nur in Deutschland, aber Danke für den UTC-Hinweis :-)

Thema ist gelöst! Vielen lieben Dank nochmal :-D