엑셀 자료를 import 해서 프로그램 dataset에 넣는 작업을 하고 있었다.
엑셀 데이터에는 분명 24시 단위로 잘 적혀 있던 데이터가
import 하고 보니 소수점으로 자꾸 나왔다.
왜 그런가 싶어 자료를 보는 중 원인을 발견할 수 있었다.
엑셀에 적혀 있던 5:30 이란 데이터를
프로그램에 import하면 오른쪽 소수점 0.2291667로 나오는데
이는 왼쪽 데이터는 엑셀에서 셀서식이 '시간'으로 되어 있었고,
오른쪽 데이터는 텍스트로 되어 있었다.
즉, import 한 데이터는 텍스트 형식으로
시간 데이터를 텍스트로 가져오다 보니 시간을 소수점으로 만들어서
가져오고 있던 것이다.
그러고보니 왼쪽 데이터 눌러보니 5:30이 아닌 5:30:00 AM으로 시간 형식로 되어 있었다.
이걸 찾아내기까지 몇 분이 걸렸는지 모른다.
import시 엑셀 자료 텍스트로 가져오는건 어떻게 통제하지 못하니
받아온 소수점 데이터를 다시 시간 단위로 만드는 과정이 필요했다.
//소수점으로 넘어온 엑셀 시간 4자리 시간으로 변환
function getDataTime(strTime){
var hour = truncate(tonumber(strTime)*24);
//trace('hour:'+hour);
var min = round(((tonumber(strTime)*24)-hour)*60);
//trace('min:'+min);
var result = lpad(hour,'0',2) +''+ lpad(min,'0',2);
return result;
}
위와 같이 함수를 만들어 strTime 파라미터 안에 소수점 넣으면 4자리 시간 단위로
반환되도록 했다.
함수 안의 과정을 보면 소수점에 24를 곱한 값이 '시' 단위가 되고,
'시'의 나머지 값에서 60을 곱한 갑이 '분'이 되는 규칙을 적용했다.
아까 위에 나온 소수점 데이터 '0.2291667'로 다시 시간을 만들어 보면 다음과 같다.
hour = 0.2291667*24 = 5.5000008 여기서 소수점 아래 숫자는 버리고
=5 가 된다.
min = (5.5000008 - 5)*60 = 0.5000008*60 = 30.000048 에서 소수점 이하 버리면
= 30
hour와 min을 다시 합치면 5:30을 만들 수 있다.