OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)JMP コミュニティの皆様、こんにちは。
今日は特別な課題があります。
JMP には数値エントリがあります (おそらく OLE、ドイツ語ロケール、秒単位)。 EXCEL で対応する正しい値を知っています。
JMPエクセル
43717,479872 09.09.2019 11:31:01
43717,479902 09.09.2019 11:31:04
43717,479884 09.09.2019 11:31:02
これらの JMP エントリ (秒単位) を、EXCEL 列に示されているような目的の日時形式に変換する JSL の方法を教えていただけますか? いくつかのアプローチを試みましたが、理解できませんでした。
どうもありがとうございます!
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)ありがとう@jthi Tom Scott のビデオ: パーフェクト。
ウィッシュリストに何かがあります: https://community.jmp.com/t5/JMP-Wish-List/Time-Zone-Conversion/idi-p/484479
多分これはいつか私たちを助けるでしょう。
こんにちは、クリスチャン
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)タイムゾーンの確認は一般的に非常にトリッキーで、エラーが発生しやすい時間とタイムゾーンの問題 - Computerphile (youtube.com) . 私の知る限り、JMP には現在のタイム ゾーンをチェックする組み込み関数はありません。
オペレーティング システムのタイムゾーンを取得し、夏時間を確認するための powershell/commandline コマンドがある場合があります。 その後、Run Command() を使用してこれらのコマンドを実行し、正しいオフセットを解析して、それを JMP の日時に追加できます。
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)やあ@Newbie2Jumpy 、
実際、これはサマータイムのタイムスタンプにのみ当てはまります。 冬季には、作成するタイムスタンプは -1 時間前になります。
私はあなたとまったく同じ問題を抱えており、残高から OLE 時間形式の Excel スプレッドシートにデータを取得しています。
冬の間、すべてのデータが 1 時間ずれているように見えたので、イライラしました。
@txnelsonタイムスタンプが夏時間か冬時間かを確認し、1 時間を加算/減算する方法 (組み込みの JSL 関数でしょうか?) はありますか?
明らかに、世界にはこのシステムにこの機能を備えている国がたくさんあります。 https://www.timeanddate.com/time/dst/2022.html
ですから、私がいるドイツやスイスだけの問題ではありません。
タイムスタンプが 3 月の最後の日曜日の午前 2:00 より前か、10 月の最後の日曜日の午前 3:00 以降かを確認できますが、これはちょっと難しいですね。
よろしくお願いします、
キリスト教徒
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)私の解決策:
Tx' 形式のアプローチ:
format(in days(43717)-in days(1)-in years(4) + .479872*indays(1),"m/d/yh:m:s");
私の計算アプローチ(OLEタイムストリングが文字であり、
タイプミスチェックではなく、ユーティリティフィールドに抽出された関連情報):
new column("My_OLE",numeric,"continuous",formula(format(in)
days(:"OLE_days"-in days(1)-in years(:"OLE_years") +
:"OLE_hhmmss"*indays(1),"d/m/yh:m:s"))) ;
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)@Newbie2Jumpy
あなたは正しいです......私は問題を解決しようとして間違ったアプローチを取りました.あなたが持っている日付の値は、実際には Excel の日付/時刻の値です。1900 年 1 月 1 日からの日数に基づいています。 (43717) 、日数、および 1 日の割合 ( .479884 )、時刻は 1 日目から始まります。JMP ベースは 1904 年 1 月 1 日からの秒数で、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"
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)背景は、これは特殊な OLE ベースの日時値です。 私がいた限り
1900年から数秒後のようだと言われました。 EXCEL はこれらの値をインポートします
正しく (右側のサンプル値)。 JMP はそうではありません。
簡単にしましょう:
最終的な JMP の表示形式が US、International、
またはヨーロッパ。 最も重要なのは、more への有効な変換です。
読み取り可能/共通の JMP 日時形式。 EXCEL 列は、
正しい結果は次のようになります。
ところで、2 つのアプローチは適切に機能しません。 どちらもすべてのエントリを
09.09.2019 11:31:01。
Re: OLE 日付 (秒単位) を DD.MM.YYYY HH:MM:SS に変換します (スクリプト)JMP 値に関する詳細情報を秒単位で提供していただけますか?Jim の考えを適用すると、3 つの値はすべて同じになります。
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"};
最初の 2 つのエントリは 3 秒離れていますが、数値は .000030 離れています
1 番目と 3 番目のエントリは 1 秒離れていますが、数字は .000012 離れています。
「秒単位のJMP値」列の単位は何ですか?
Re: 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";