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
EXCEL 열에 표시된 것처럼 이러한 JMP 항목(초 단위)을 원하는 날짜/시간 형식으로 변환하는 방법을 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/명령줄 명령이 있을 수 있습니다. 그런 다음 Run Command()를 사용하여 해당 명령을 실행하고 올바른 오프셋을 구문 분석하여 JMP의 datetime에 추가할 수 있습니다.
Re: OLE 날짜(초)를 DD.MM.YYYY HH:MM:SS로 변환(스크립팅)안녕 @Newbie2Jumpie ,
실제로 이것은 여름철 타임스탬프에만 해당됩니다. 겨울철에 생성하는 타임스탬프는 -1시간 전입니다.
나는 당신과 똑같은 문제가 있고 균형에서 데이터를 OLE 시간 형식의 Excel 스프레드시트로 가져오고 있습니다.
겨울철에는 모든 데이터가 1시간씩 이동하는 것 같아서 답답했습니다.
@txnelson 타임스탬프가 여름인지 겨울인지 확인하고 1시간을 더하거나 빼는 방법(내장 JSL 기능일 수 있습니까?)이 있습니까?
분명히 세계에는 이 시스템에 이 기능이 있는 많은 국가가 있습니다. https://www.timeanddate.com/time/dst/2022.html
따라서 내가 있는 독일이나 스위스에서만 문제가 되는 것은 아닙니다.
타임스탬프가 3월 마지막 일요일 오전 2시 이전인지 또는 10월 마지막 일요일 오전 3시 이후인지 확인할 수 있지만 이것은 까다롭습니다.
친애하는,
신자
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",숫자,"연속",formula(형식(에서
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로 변환(스크립팅)@Newbie2Jumpie
당신 말이 맞아요......문제를 해결하는 데 잘못된 접근 방식을 취했습니다.가지고 있는 날짜 값은 실제로 Excel 날짜/시간 값입니다.1900년 1월 1일 이후의 일수를 기준으로 합니다. (43717) , 일 및 하루의 비율, ( .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 기반 datetime 값입니다. 내가 그랬던 것처럼
1900년 이후 몇 초 후인 것 같습니다. EXCEL은 이러한 값을 가져옵니다.
올바르게(오른쪽의 샘플 값). JMP는 그렇지 않습니다.
단순화하자:
최종 JMP 표시 형식이 미국인지, 국제인지,
또는 유럽. 가장 중요한 것은 작업 전환입니다.
읽을 수 있는/공통 JMP 날짜/시간 형식. EXCEL 열은
올바른 결과는 다음과 같아야 합니다.
BTW, 두 가지 접근 방식이 제대로 작동하지 않습니다. 둘 다 모든 항목을 다음으로 설정합니다.
09.09.2019 11:31:01.
Re: 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 값(초)" 열의 단위는 무엇입니까?
Re: OLE 날짜(초)를 DD.MM.YYYY HH:MM:SS로 변환(스크립팅)나 이것이 전혀 도움이 될지 모르겠지만 여기에 변환을 수행하는 잔인한 방법이 있습니다.JMP 날짜 값의 초기 설정은 US 숫자 구조입니다.
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";