Partiamo dallo scopo di questo post:
Hai avuto problemi con le date e gli orari in cui gli utenti hanno impostazioni regionali diverse e come le hai gestite?
Di tanto in tanto ho riscontrato problemi con diversi formati di ora (e data) durante l'esecuzione di script e la condivisione di tali script (di recente ho lavorato con utenti con impostazioni internazionali e JMP diverse). Questo problema è solitamente correlato al formato dell'ora, poiché JMP non fornisce un formato "generale" per l'ora (per la data posso usare Locale Date).
Prima di JMP16 ho creato il mio codice per verificare se l'utente utilizza : o . come separatore dell'ora e quindi creato il formato Locale Date Time basato su questo:
timeSeparator = Left(Regex(Format(Today() ,"h:m:s"), "\d", "", GLOBALREPLACE),1);
customFormat = "Locale Date Time h"||timeSeparator||"m"||timeSeparator||"s";
JMP16 aiuta in questo con Format Pattern ma non è il più semplice da usare quando si esegue la formattazione (l'utente deve sapere di usare <::> per il separatore di tempo):
<-><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>A seconda di quello che sto facendo, ho soluzioni diverse, se voglio solo avere data e ora nella casella di testo, di solito uso solo AsDate(), ma quando voglio creare report specifici o fornire GUI con Number Edit Box che ha l'opzione della casella del calendario Non posso usarlo.</P><P>Di seguito sono riportati un paio di esempi sul problema e sulle soluzioni che sto attualmente utilizzando a seconda della versione di JMP:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">Visualizza di più...</A><NOSCRIPT>(Evidenziare da leggere)</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
I miei risultati usando JMP16:
Ho creato una richiesta di funzionalità di supporto JMP per avere l'opzione del formato General Time (Locale Date Time o formato ISO) in JMP, ma la persona di supporto non era troppo fiduciosa che sarebbe stata implementata (forse se creo un elemento della Wish List e riceve Kudos, potrebbe avere maggiori possibilità).
E ripeti la domanda:
Hai riscontrato questi problemi con date e orari e come li hai gestiti quando gli utenti hanno impostazioni regionali diverse?
Modificare:
Formattare le impostazioni dal mio laptop di lavoro utilizzando JMP16 Pro:
Dall'altro mio PC con formati di data molto strani usando JMP15:
Tabella datiScriptingQuesto comportamento verrà modificato al più tardi in JMP17. Di seguito è riportato un esempio di come dovrebbe funzionare in JMP17:
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"
Fino a JMP17 utilizzerò Format Pattern (JMP16) o i miei metodi di creazione della data locale