Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieviele Zeichen hat ein Zeitstempel maximal? (https://www.delphipraxis.net/190102-wieviele-zeichen-hat-ein-zeitstempel-maximal.html)

Der schöne Günther 30. Aug 2016 17:48

Wieviele Zeichen hat ein Zeitstempel maximal?
 
Einfache Aufgabe: Wie viele Zeichen brauchen wir um Datum und Uhrzeit anzuzeigen?

Mir fällt keine einfache Lösung ein. Folgendes Programm verdeutlicht es:
Delphi-Quellcode:
program Project15;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils, System.DateUtils;

var
   timestamp: TDateTime;
begin
   FormatSettings := TFormatSettings.Create('EN');

   timeStamp := EncodeDateTime(
      2016, 08, 02,
      09, 05, 03, 0
   );
   WriteLn( DateTimeToStr(timestamp) );

   timeStamp := EncodeDateTime(
      2016, 11, 22,
      12, 15, 13, 999
   );
   WriteLn( DateTimeToStr(timestamp) );

   readln;
end.
Ausgabe:
Code:
8/2/2016 9:05:03 AM
11/22/2016 12:15:13 PM
Das nur als Beispiel für ein bestimmtes FormatSetting ("EN").

jfheins 30. Aug 2016 17:57

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Allgemein natürlich beliebig viele.

Wenn du ein Limit setzen musst, dann musst du das Format festlegen und z.B. einfach nach ISO "2016-08-30T16:14:03Z" hinschreiben. Ansosnten kann ich ja hingehen und mir im Windows einstellen, dass die Standard-Locale "Llanfairpwllgwyngyllgogerychwyrndrobwllllantysili ogogogoch" ist, in deren Standard-Zeitformat eben Wochentage vorkommen mit ähnlich vielen Zeichen ;-)

Oder Klingonische Wochentage ... :stupid:

Der schöne Günther 30. Aug 2016 18:04

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Ich kann das Format nicht festlegen, das ist, was der Benutzer grade als Anwendungssprache eingestellt hat.

Ich tue mich schwer mit dem "maximalen Zeitstempel". Wer sagt mir dass z.B. nur "vormittags" an die Uhrzeit drangeschrieben wird, nicht aber "nachmittags" (und somit länger ist)?

t.roller 30. Aug 2016 20:11

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Auf Win32-Systemen beträgt die Größe von System.Extended 10 Byte.

Der schöne Günther 30. Aug 2016 20:47

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Ins falsche Thema geklickt? :-D

nahpets 30. Aug 2016 22:28

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Nein, nicht ins falsche Thema geklickt.

Die Zeitangabe ist eine Zahl, vor dem Komma stehen die Tage, hinter dem Komma die Tagesanteile.

Die einfachste Methode ist (meiner Meinung nach) diese Zahl zu speichern.

Muss die Zeit, das Datum oder eine Kombination daraus angezeigt werden, nimmt man dafür die Systemeinstellungen des Rechners, auf dem die Software gerade läuft, muss sich aber keinerlei Gedanken darüber machen, wie diese Einstellungen sind, um die daraus resultierende "beliebig lange Zeichenfolge" verlustfrei abzuspeichern.

Speichere ich für Zeitangaben nur die Zahl ab, so ist es egal, ob der Anwender auf seinem System das Datum nun in der deutschen, der englischen, griechischen, römischen ... Form, mit oder ohne ausgeschriebene Wochentage, Monate ... eingestellt hat. Die Zahl bleibt immer die Gleiche und in der Anzeige stehts halt so, wie der Anwender es für sich als gut befindet.

Weiterer Vorteil: Hast Du die Zeitangabe in 'ner Datenbank als Zahl abgespeichert, so kannst Du immer aufsteigend oder absteigend danach sortieren per "order by Zeitspalte". Du musst Dir keinen Kopp darüber machen, ob Du jetzt zuerst eine (wie auch immer geartete) Stringzerlegung implementieren musst, damit Du eine Zeichenfolge bekommst, die mit dem Jahr beginnt, dann den Monat enthält, gefolgt vom Tag und der Uhrzeit.

Hier könntest Du, je nach der vom Anwender getroffenen Systemeinstellung für Datums- und Zeitangaben richtig Spass bekommen. System.Extended ist da in der Verwendung banal einfach.

himitsu 30. Aug 2016 22:56

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Genau, Datenspeicherung/-verarbeitung und Datenanzeige sind vollkommen getrennt.

Der User bekommt es im aktuellen Systemformat und intern nutzt man ein definiertes Format. (binär oder sonstwie)
Wäre doch zu blöd, wenn du es speicherst, jemand zwischendurch die Sprache ändert oder von einem anderen System/Benutzerkonto drauf zugreift und du das alte Format nicht mehr auslesen/verstehen kannst. :stupid:

Alternativ muß man zu den Daten das Speicherformat mit speichern, um beim Auslesen die Daten immer verstehen zu können.

BUG 30. Aug 2016 23:48

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1346228)
Einfache Aufgabe: Wie viele Zeichen brauchen wir um Datum und Uhrzeit anzuzeigen?

Ein Wort passt da nicht rein :stupid:


Was willst du denn mit der Zeit machen: ausgeben (GUI/Report) oder irgendwo speichern? Ich persönlich mag ja UNIX-Timestamps als Austauschformat, wenn man in Delphi bleibt kann man vermutlich auch das interne Format benutzen. Keine Ahnung, ob die Referenzzeit des Formats in Delphi (December 30, 1899; 12:00 A.M) auch eine festgelegte Zeitzone hat ... sonst könnte das auch schnell unangenehm werden.

Sherlock 31. Aug 2016 07:24

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Na, das ist doch jetzt aber einfach, wenn Du folgende Regeln beachtest:
1) Zeige einen Zeitstempel an
2) Der Anwender ist König
3) Der Anwender darf beliebige Anzeigeformate einstellen

Lösung: Beliebig lange.

Wenn Deine Anwendung also derartig flexibel sein soll/muss/darf, dann mußt Du auch Deine Anwendung entsprechend bauen. Wenn also ein beliebiges Format für eine Zeitstempel-Anzeige gestattet ist, dann mußt Du eben ausmessen, wie lange das im jeweils konkreten Fall wird, und entsprechend für Platz sorgen. Du könntest natürlich auch den faulen/praktischen/KISS Weg gehen und das Format selbst festlegen, eventuell basierend auf den Gewohnheiten Deiner drei häufigsten Anwendergruppen (nein, nicht Frauen, Männer und Kinder, sondern Deutsche, Engländer und Russen). Für diese Gruppen definierst Du dann fixe Formate basierend auf deren jeweiligen Landesstandards, die kannst Du dann per Konfiguration zur Auswahl geben, oder eben selbst festlegen. Dann weisst du wie lange so ein Zeitstempel maximal werden kann (vermutlich den 31.12.9999 23:59:59 als Grundlage nehmen). Insgesamt auch nicht soooo KISS, aber weniger aufwendig als die total flexible Lösung.

Sherlock

Der schöne Günther 31. Aug 2016 08:32

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Leute, bitte. :spin2:

Vielen Dank für die enthusiastischen Beiträge, aber ... Ich meine Zeichen (nicht Bytes). Zeichen auf dem Bildschirm, auf dem Papier, sonstwo. Niemand hat etwas von Speichern und Datenformaten gesagt.

Kann ich wissen wie breit ich meine Anzeige mindestens machen muss?
Mehr nicht :-D

Das Format kann ich nicht vorgeben, das hat jede Landeseinstellung anders und das muss man respektieren.

Zitat:

Zitat von Sherlock (Beitrag 1346273)
Dann weisst du wie lange so ein Zeitstempel maximal werden kann (vermutlich den 31.12.9999 23:59:59 als Grundlage nehmen). Insgesamt auch nicht soooo KISS, aber weniger aufwendig als die total flexible Lösung.

Danke. Genau so habe ich es bislang. Das fällt natürlich flach sollte eine Ländereinstellung z.B. nur ein "AM" dranschreiben, aber kein "PM", aber das ist bislang das mit dem besten Aufwand/Nutzen-Verhältnis.

bra 31. Aug 2016 08:58

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1346282)
Kann ich wissen wie breit ich meine Anzeige mindestens machen muss?

Ich bezweifle, dass man da eine allgemeingültige Aussage treffen kann, da die Ausgabe je nach Land/Einstellung/OS/Benutzervorlieben sehr unterschiedlich ausfallen kann und man sicher nicht alle möglichen Varianten kennt.
Nur mal als Beispiel: gängiges Format für deutsche Uhrzeit ist "01.01.2000 01:23 Uhr". Unter neueren Android steht da hinten noch "nachm." oder "vorm." dran. Jetzt kann da aber auch "Erster Januar im Jahre 2000 nach Christus, gegen 01:23:45.123 Uhr vormittag, Sonnenschein mit leichten Böhen" stehen.

TiGü 31. Aug 2016 09:40

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1346282)
Vielen Dank für die enthusiastischen Beiträge, aber ... Ich meine Zeichen (nicht Bytes). Zeichen auf dem Bildschirm, auf dem Papier, sonstwo.

Mal doof gefragt:
Was ist denn dein Anwendungsfall?
Also worauf willst du die Uhrzeit/Datum anzeigen?
Und warum bist du hier so eingeschränkt?

Kannst du nicht zur Laufzeit das Control - bspw. ein Label - anhand der Ländereinstellung, einen Beispieldatum als String und mit Canvas.TextWidth die ungefähr benötigte Länge ermitteln und dein Control entsprechend verändern (Width, Multiline, Fontsize...whatever)?

Der schöne Günther 31. Aug 2016 09:44

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Doch klar kann ich das. Genau das tue ich auch (TextWidth und so). Im ersten Beitrag wollte ich aber zeigen: Je nachdem was für ein Beispieldatum ich nehme ist der String mal ein paar Zeichen länger, mal kürzer. Ich nehme jetzt so etwas wie "10 Sekunden vor Neujahr" und hoffe dass es keinen Zeitstempel gibt der "länger" ausgeschrieben wird.

Aber meine beiden Nieren würde ich darauf nicht verwetten. Beispielsweise wenn irgendeine Kultur an ihre Uhrzeiten nur "AM", nicht aber "PM" dranschreibt. Denn dann wäre der ausgeschriebene Zeitstempel für Vormittags länger. Und wer weiß was es noch für Stolperfallen gibt (z.B. Nordkoreanische Zeitrechnung :-D).

TiGü 31. Aug 2016 09:51

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Teste doch in einer Schleife ca. 24 Zeiten eines Tages (und zur Not mal 365 Tage im Jahr) und und speichere die die längste Stringlänge?!?

bra 31. Aug 2016 09:54

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Oder mach ein Memo mit Scrollbalken :lol:

Neutral General 31. Aug 2016 09:54

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
-- Ups falscher Thread --

Luckie 31. Aug 2016 09:54

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Ach du meine Güte. Er will wissen, wie breit das Label sein muss. :mrgreen: :wall: Wenn du ein Label nimmst, kannst du die Eigenaschaft AutoSize auf True stellen. Dann passt es immer. Mit einem maximalen festen Wert wirst du so gut wie keine Chance haben. Auf eskimoisch heißt Neujahr vielleicht: "Der Tag an dem die Sonne nicht aufgeht und der Eisbär sich im Süden auf dem Rücken wälzt". ;)

p80286 31. Aug 2016 09:55

AW: Wieviele Zeichen hat ein Zeitstempel maximal?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1346296)
Und wer weiß was es noch für Stolperfallen gibt (z.B. Nordkoreanische Zeitrechnung :-D).

Deine Stolperfalle ist der Benutzer. Je nachdem was er bevorzugt hast Du da unterschiedliche Ausprägungen "Zwölf Uhr Mittags", "Achtundzwanzigster Oktober Neunzehnhundertsiebenundachzig um Vierundzwanzig Uhr Siebenundsechzig" ist nicht unbedigt gebräuchlich aber nicht unmöglich.

Zitat:

Zitat von Luckie (Beitrag 1346301)
Ach du meine Güte. Er will wissen, wie breit das Label sein muss. :mrgreen: :wall: Wenn du ein Label nimmst, kannst du die Eigenaschaft AutoSize auf True stellen. Dann passt es immer.

Nö ganz so simpel ist es nicht, je nachdem welche Anforderung und welche Delphi Version Du hast.


Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz