让我们从这篇文章的目的开始:
当用户具有不同的区域设置时,您是否遇到过日期和时间问题?您是如何处理这些问题的?
在编写脚本和共享这些脚本时,我有时会遇到不同时间格式(和日期)的问题(最近一直在与具有不同区域设置和 JMP 设置的用户一起工作)。此问题通常与时间格式有关,因为 JMP 不提供时间的“通用”格式(对于日期,我可以使用区域设置日期)。
在 JMP16 之前,我已经完成了自己的代码来检查用户是否正在使用 : 或 。作为时间分隔符,然后基于此构建区域设置日期时间格式:
timeSeparator = Left(Regex(Format(Today() ,"h:m:s"), "\d", "", GLOBALREPLACE),1);
customFormat = "Locale Date Time h"||timeSeparator||"m"||timeSeparator||"s";
JMP16 通过格式模式帮助解决此问题,但它并不是在进行格式化时使用的最简单的模式(用户必须知道使用 <::> 作为时间分隔符):
<HH24><::><MM> <::><SS> ”);</SS></MM></HH24> 根据我正在做的事情,我有不同的解决方案,如果我只想在文本框中显示日期和时间,我通常只使用 AsDate(),但是当我想构建特定的报告或提供带有日历框选项的数字编辑框的 GUI 时我不能用那个。以下是我当前使用的问题和解决方案的几个示例,具体取决于 JMP 版本:查看更多...(突出显示阅读)Names Default To Here(1);
Clear Log();
Print("New window");
nw = New Window("", Lineup Box(N Col(2),
Text Box("Format Pattern <-><MM> <-><YYYY><HH24> <::><MM> <::><SS> ", << 设置换行(500)), cal1 = 数字编辑框(Today()), 文本框("区域设置日期时间 h:m:s", << 设置换行(500)), cal2 = 数字编辑框(Today()), 文本框("区域设置日期时间 hms", << 设置换行(500)), cal3 = 数字编辑框(Today()), 文本框("yyyy-mm-ddThh:mm:ss" , << Set Wrap(500)), //ISO 格式? cal4 = 数字编辑框(Today()), Text Box("构建区域设置日期格式", << Set Wrap(500)), cal5 = 数字编辑框(Today()), 文本框("无格式", << 设置换行(500)), cal6 = 数字编辑框(Today()) )); cal1 << 设置格式(Format("格式模式", "</SS></MM></HH24></YYYY></MM><-> <-> <::> <::> ")); cal2 << 设置格式(Format("区域设置日期时间 h:m:s")); cal3 << 设置格式(Format("区域设置日期时间 hms")); cal4 << 设置格式(Format( "yyyy-mm-ddThh:mm:ss")); timeSeparator = Left(Regex(Format(Today() ,"h:m:s"), "\d", "", GLOBALREPLACE),1); customFormat = "区域设置日期时间 h"||timeSeparator||"m"||timeSeparator||"s"; cal5 << 设置格式(customFormat); Print("显示"); Show(格式(Today(),"格式图案”, ”<-> <-> <::> <::> ")); Show(Format(Today(),"区域设置日期时间 h:m:s")); Show(Format(Today()(),"区域设置日期时间 hms")); Show(Format(Today( ),"yyyy-mm-ddThh:mm:ss")); Show(Format(Today(),customFormat)); Show(Today()); Print("数据表"); dt = 新表("无标题", 添加行(1), 保存时压缩文件(1), 新列("FormatPattern", Numeric, "Continuous", Format("Best", 12), << 设置每个值(Today())),新列(“LocaleDateTime:”,数字,“连续”,格式(“最佳”,12),<<设置每个值(今天())),新列(“LocaleDateTime。”,数字,“连续”,格式("最佳", 12), << 设置每个值(今天())), 新列("ISO?", 数字, "连续", 格式("最佳", 12), << 设置每个值(今天())), 新列("自定义", 数字, "连续", 格式("最佳", 12), << 设置每个值(今天())), 新列("NoFormat", 数字, "连续", Format("最佳", 12), << 设置每个值(Today())) ); Column(dt, "FormatPattern") << Format("格式模式", "<-><MM><-><YYYY><HH24> <::><MM> <::><SS> "); Column(dt, "LocaleDateTime:") << Format("区域设置日期时间 h:m:s"); Column(dt, "LocaleDateTime.") << Format("区域设置日期时间 hms"); Column (dt, "ISO?") << 格式("yyyy-mm-ddThh:mm:ss"); 列(dt, "自定义") << 格式(customFormat); 显示(Today());</SS></MM></HH24></YYYY></MM>Format("Format Pattern", "<YYYY><-><MM> <-></MM></YYYY>
我使用 JMP16 的结果:
我已经创建了关于在 JMP 中具有常规时间格式选项(区域设置日期时间或 ISO 格式)的 JMP 支持功能请求,但支持人员不太希望它能够实现(也许如果我创建一个愿望清单项目并它会得到荣誉,它可能会得到更好的机会)。
并重复问题:
您是否遇到过这些日期和时间问题?当用户具有不同的区域设置时,您是如何处理这些问题的?
编辑:
使用 JMP16 Pro 从我的工作笔记本电脑格式化设置:
从我的另一台使用 JMP15 的具有非常奇怪的日期格式的电脑:
此行为最迟将在 JMP17 中更改。 以下是它在 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"
在 JMP17 之前,我将使用格式模式 (JMP16) 或我的 Locale Date 构建方法