将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)嗨 JMP 社区,
今天我有一个特殊的挑战:
在 JMP 中,我有数字条目(大概是 OLE,德语语言环境,以秒为单位)。 我知道EXCEL中相应的正确值,例如
跳转EXCEL
43717,479872 09.09.2019 11:31:01
43717,479902 09.09.2019 11:31:04
43717,479884 09.09.2019 11:31:02
您能否向我展示一种 JSL 方法,如何将这些 JMP 条目(以秒为单位)转换为所需的日期时间格式,如 EXCEL 列中所示? 我尝试了几种方法,但无法弄清楚。
非常感谢!
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)谢谢@jthi对于 Tom Scott 视频:完美。
愿望清单中有一些东西: https://community.jmp.com/t5/JMP-Wish-List/Time-Zone-Conversion/idi-p/484479
也许有一天这会对我们有所帮助。
问候,基督徒
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)检查时区通常非常棘手且容易出错时间和时区的问题 - Computerphile (youtube.com) . 据我所知,JMP 中没有用于检查当前时区的内置函数。
可能有 powershell/命令行命令来获取操作系统时区并检查夏令时。 之后,您可以使用 Run Command() 来运行这些命令并解析正确的偏移量并将其添加到 JMP 的日期时间。
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)你好@Newbie2Jumpie ,
事实上,这仅适用于夏季时间戳。 在冬季,您创建的时间戳是 -1 小时。
我和你有完全相同的问题,我正在从天平获取数据到 OLE 时间格式的 excel 电子表格。
我很沮丧,因为我的所有数据在冬季的几个月里似乎都偏移了 1 小时。
@txnelson有没有一种方法(也许是内置的 JSL 函数?)来检查时间戳是在夏季还是冬季,而不是加/减一小时?
显然世界上有很多国家的系统都有这个功能: https://www.timeanddate.com/time/dst/2022.html
所以这不应该只是我所在的德国或瑞士的问题。
可以检查时间戳是在 3 月的最后一个星期日凌晨 2:00 之前还是在 10 月的最后一个星期日凌晨 3:00 之后,但这有点棘手,不是吗?
此致,
基督教
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)我的解决方案:
Tx'格式的做法:
格式(天数(43717)-天数(1)-年数(4)+ .479872*天数(1),“m/d/yh:m:s”);
我的计算方法(假设 OLE 时间字符串是字符和
提取到实用程序字段中的相关信息,未检查拼写错误):
新列(“My_OLE”,数字,“连续”,公式(格式(在
天(:“OLE_days”-以天(1)为单位-以年为单位(:“OLE_years”)+
:"OLE_hhmmss"*indays(1),"d/m/yh:m:s"))) ;
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)@Newbie2Jumpie
你是对的......我在试图解决这个问题时采取了错误的方法。您拥有的日期值实际上是 Excel 日期/时间值。它们基于自 1900 年 1 月 1 日以来的天数, (43717) , 对于天数和一天的一部分, ( .479884 ),对于时间,它们从第 1 天开始。JMP 基数是自 01JAN1904 以来的秒数,从第 0 天开始。因此转换公式为:
in days(43717)-in days(1)-in years(4) + .479872*indays(1)
这可以显示在以下 JSL 中
format(in days(43717)-in days(1)-in years(4) + .479872*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479902*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479884*indays(1),"m/d/y h:m:s");
format(in days(43717)-in days(1)-in years(4) + .479872*indays(1),"m/d/y h:m:s")
/*:
"09/09/2019 11:31:01 AM"
//:*/
format(in days(43717)-in days(1)-in years(4) + .479902*indays(1),"m/d/y h:m:s");
/*:
"09/09/2019 11:31:04 AM"
//:*/
format(in days(43717)-in days(1)-in years(4) + .479884*indays(1),"m/d/y h:m:s");
/*:
"09/09/2019 11:31:02 AM"
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)背景是,这是一个特殊的基于 OLE 的日期时间值。 据我所知
告诉它似乎是 1900 之后的几秒钟。 EXCEL 导入这些值
正确(右侧的示例值)。 JMP 没有。
让我们简化一下:
我不介意最终的 JMP 显示格式是美国、国际、
或欧洲。 最重要的是有效地转换为更
可读/通用的 JMP 日期时间格式。 EXCEL 列显示的是什么
正确的结果应该是这样的。
顺便说一句,这两种方法都不能正常工作。 两者都将所有条目设置为
09.09.2019 11:31:01。
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)您能否在几秒钟内提供有关 JMP 值的更多信息?如果我应用 Jim 的想法,所有三个值都是相同的。
jmp_list = {43717.479872, 43717.479902, 43717.479884};
excel_list = {};
for (i = 1, i <= nitems(jmp_list), i++,
one_dt = jmp_list[i];
// Add the number of seconds different from the JMPValue to the
// JMP date time value for 09.09.2019 11:31:01
jmp_dt = one_dt + 3650829743.52013;
// Display its value using a standard JMP format
dtc = Format( jmp_dt, "d/m/y h:m:s" ) ;
dtc = substitute(dtc, "/", ".");
excel_list[i] = dtc;
);
show(excel_list);
excel_list = {"09.09.2019 11:31:01 AM", "09.09.2019 11:31:01 AM", "09.09.2019 11:31:01 AM"};
前两个条目相隔 3 秒,但数字相隔 .000030
第一个和第三个条目相隔 1 秒,但数字相隔 .000012。
“以秒为单位的 JMP 值”列的单位是什么?
回复:将 OLE 日期(以秒为单位)转换为 DD.MM.YYYY HH:MM:SS(脚本)我不知道这是否会有所帮助,但这是进行转换的一种蛮力方法。请注意,JMP 日期值的初始设置为美国数字结构
Names Default To Here( 1 );
JMPValue = 43717.479872;
// Add the number of seconds different from the JMPValue to the
// JMP date time value for 09.09.2019 11:31:01
JMPDateTime = JMPValue + 3650829743.52013;
// Display it's value using a standard JMP format
Show( Format( JMPDateTime, "d/m/y h:m:s" ) );
// Now show the same JMPDateTime but using a Custom
// format to change the value into exactly the desired
// structure
Show(
Format(
JMPDateTime,
"Custom",
Formula(
Trim( Substr( " 0", -1 * Length( Char( Day( value ) ) ), 1) ) || Char( Day( value ) )
|| "." ||
Trim( Substr( " 0", -1 * Length( Char( Month( value ) ) ), 1) ) || Char( Month( value ) )
|| "." ||
Char( Year( value ) )
|| " " ||
Trim( Substr( " 0", -1 * Length( Char( Hour( value ) ) ), 1) ) || Char( Hour( value ) )
|| ":" ||
Trim( Substr( " 0", -1 * Length( Char( Minute( value ) ) ), 1) ) || Char( Minute( value ) )
|| ":" ||
Trim( Substr( " 0", -1 * Length( Char( Floor( Second( value ) ) ) ), 1) ) || Char( Floor( Second( value ) ) )
),
40
)
);
产生结果
Format(JMPDateTime, "d/m/y h:m:s") = "09/09/2019 11:31:01 AM";
Format(JMPDateTime, "Custom", Formula(Trim(Substr(" 0", -1 * Length(Char(Day(value))), 1)) || Char(Day(value)) || "." || Trim(Substr(" 0", -1 * Length(Char(Month(value))), 1)) || Char(Month(value)) || "." || Char(Year(value)) || " " || Trim(Substr(" 0", -1 * Length(Char(Hour(value))), 1)) || Char(Hour(value)) || ":" || Trim(Substr(" 0", -1 * Length(Char(Minute(value))), 1)) || Char(Minute(value)) || ":" || Trim(Substr(" 0", -1 * Length(Char(Floor(Second(value)))), 1)) || Char(Floor(Second(value)))), 40) = "09.09.2019 11:31:01";