將 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";