2013-08-11 7 views
-1

자바 표준 API에서 필자에게 피팅 할 이유가 생겼습니다. 날짜를 싫어합니다. 내 문제는 시간 단위 변환입니다. 이제는 입력으로 "19.1", "33.79", "10.321"또는 "10.23.66"... 012 : ","ss.SSS "패턴과 SimpleDateFormat에의 마법 :자바 - SimpleDateFormat 문자열을 밀링 변환 날짜로 변환

SimpleDateFormat dateFormat = new SimpleDateFormat("ss.SS"); 
dateFormat.setTimeZone(getTimeZone("GMT")); 
dateFormat.parse("19.1").getTime(); 

그러나 결과는 다소 이상하다. 나는 19001L 공장을 얻지 만 19100 공장을 얻길 바랍니다. 이 올바른 전환입니까?

또한 "19,1111"이 19011L이거나 "ss.SS"패턴과 일치하지 않을 것이고 예외가 발생합니다. 모든 SimpleDateFormat을 사용하면 밀에서 20111L을 성공적으로 파싱 할 수 있습니다. 나는 이것에 혼란 스럽다 ... 그런 식으로 일한다고 생각하니?

+0

'19100' 밀리를 원한다면'19.100'의 값을 입력해야한다고 생각합니다. 기본적으로 당신은'19.001'을 요구하고 있습니다 ... – MadProgrammer

+1

당신의 숫자를 보시고, 당신은'19.1'을 지나가고 있습니다, 당신은 파싱이'ss.SS'입니다. 따라서'ss = 19'와'SS = 1! = 100', 즉 후행 0과 선행 0은 ** 같은 것이 아닙니다 **. 이것은 결국 십진법입니다 ... –

답변

1

이렇게 작동해야하며,이 형식을 직접 파싱해야 할 것입니다. 그래도 그다지 어렵지는 않겠지 만 ...

long millis = 0; 
String[] numbers = dateString.split("."); 
millis += Integer.parseInt(numbers[numbers.length-1]) * 
      (int)Math.pow(10,numbers[numbers.length-1].length()-3)); 
for (int i=2; i<=numbers.length; i++) { 
    millis += Integer.parseInt(numbers[numbers.length-i]) * 
      (int)Math.pow(60,i-1) * 100; 
} 

나는 이것을 테스트하지는 않았지만 적절한 시작점을 제공해야합니다.

관련 문제