Beginnen wir mit dem Zweck dieses Beitrags:
Hatten Sie Probleme mit Datums- und Uhrzeitangaben, wenn Benutzer unterschiedliche regionale Einstellungen haben, und wie sind Sie damit umgegangen?
Von Zeit zu Zeit hatte ich Probleme mit verschiedenen Zeitformaten (und Datum), wenn ich Skripte erstellte und diese Skripte freigab (habe in letzter Zeit mit Benutzern gearbeitet, die unterschiedliche Gebietsschema- und JMP-Einstellungen haben). Dieses Problem hängt normalerweise mit dem Zeitformat zusammen, da JMP kein "allgemeines" Format für die Zeit bereitstellt (für Datum kann ich Locale Date verwenden).
Vor JMP16 habe ich meinen eigenen Code erstellt, um zu überprüfen, ob der Benutzer : oder verwendet. als Zeittrennzeichen und erstellt dann das Locale Date Time Format basierend darauf:
timeSeparator = Left(Regex(Format(Today() ,"h:m:s"), "\d", "", GLOBALREPLACE),1);
customFormat = "Locale Date Time h"||timeSeparator||"m"||timeSeparator||"s";
JMP16 hilft dabei beim Format Pattern, aber es ist nicht das einfachste Format beim Formatieren (der Benutzer muss wissen, dass <::> als Zeittrennzeichen verwendet wird):
<-><MM><-><YYYY> <HH24><::><MM><::><SS>", << Set Wrap(500)),
cal1 = Number Edit Box(Today()),
Text Box("Locale Date Time h:m:s", << Set Wrap(500)),
cal2 = Number Edit Box(Today()),
Text Box("Locale Date Time h.m.s", << Set Wrap(500)),
cal3 = Number Edit Box(Today()),
Text Box("yyyy-mm-ddThh:mm:ss", << Set Wrap(500)), //ISO format?
cal4 = Number Edit Box(Today()),
Text Box("Built locale date format", << Set Wrap(500)),
cal5 = Number Edit Box(Today()),
Text Box("No format", << Set Wrap(500)),
cal6 = Number Edit Box(Today())
));
cal1 << Set Format(Format("Format Pattern", "</SS></MM></HH24></YYYY></MM><-><-> <::><::>"));
cal2 << Set Format(Format("Locale Date Time h:m:s"));
cal3 << Set Format(Format("Locale Date Time h.m.s"));
cal4 << Set Format(Format("yyyy-mm-ddThh:mm:ss"));
timeSeparator = Left(Regex(Format(Today() ,"h:m:s"), "\d", "", GLOBALREPLACE),1);
customFormat = "Locale Date Time h"||timeSeparator||"m"||timeSeparator||"s";
cal5 << Set Format(customFormat);
Print("Show");
Show(Format(Today(),"Format Pattern", "<-><-> <::><::>"));
Show(Format(Today(),"Locale Date Time h:m:s"));
Show(Format(Today()(),"Locale Date Time h.m.s"));
Show(Format(Today(),"yyyy-mm-ddThh:mm:ss"));
Show(Format(Today(),customFormat));
Show(Today());
Print("Data table");
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("FormatPattern", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today())),
New Column("LocaleDateTime:", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today())),
New Column("LocaleDateTime.", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today())),
New Column("ISO?", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today())),
New Column("Custom", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today())),
New Column("NoFormat", Numeric, "Continuous", Format("Best", 12), << Set Each Value(Today()))
);
Column(dt, "FormatPattern") << Format("Format Pattern", "<-><-> <::><::>");
Column(dt, "LocaleDateTime:") << Format("Locale Date Time h:m:s");
Column(dt, "LocaleDateTime.") << Format("Locale Date Time h.m.s");
Column(dt, "ISO?") << Format("yyyy-mm-ddThh:mm:ss");
Column(dt, "Custom") << Format(customFormat);
Show(Today());Format("Format Pattern", "<YYYY><-><MM><-><DL><DD> <HH24><::><MM><::><SS>");<P> </P><P>Je nachdem, was ich tue, habe ich verschiedene Lösungen. Wenn ich nur Datum und Uhrzeit in der Textbox haben möchte, verwende ich normalerweise nur AsDate (), aber wenn ich bestimmte Berichte erstellen oder eine GUI mit einer Nummernbearbeitungsbox mit einer Kalenderboxoption bereitstellen möchte Ich kann das nicht verwenden.</P><P>Im Folgenden finden Sie einige Beispiele zu dem Problem und den Lösungen, die ich derzeit je nach JMP-Version verwende:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">Mehr sehen...</A><NOSCRIPT>(Zum Lesen markieren)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here(1);
Clear Log();
Print("New window");
nw = New Window("", Lineup Box(N Col(2),
Text Box("Format Pattern
Meine Ergebnisse mit JMP16:
Ich habe eine JMP-Support-Funktionsanfrage bezüglich der Option für das allgemeine Zeitformat (Locale Date Time oder ISO-Format) in JMP erstellt, aber die Support-Person war nicht allzu hoffnungsvoll, dass sie implementiert würde (vielleicht wenn ich einen Wunschlisteneintrag erstelle und es bekommt Kudos, es könnte eine bessere Chance bekommen).
Und Wiederholung der Frage:
Hatten Sie diese Probleme mit Datum und Uhrzeit und wie sind Sie damit umgegangen, wenn Benutzer unterschiedliche regionale Einstellungen haben?
Bearbeiten:
Formatieren Sie die Einstellungen von meinem Arbeitslaptop mit JMP16 Pro:
Von meinem anderen PC mit sehr seltsamen Datumsformaten mit JMP15:
DatentabelleSkriptingDieses Verhalten wird spätestens in JMP17 geändert. Unten ist ein Beispiel, wie es in JMP17 funktionieren sollte:
Format(Today(), "Locale Date Time h:m:s"); = "12/07/2021 16.07.20"
Format(Today(), "Locale Date Time h.m.s"); = "12/07/2021 16.07.20"
Bis JMP17 werde ich entweder Format Pattern (JMP16) oder meine Locale Date-Building-Methoden verwenden