2013-10-22 5 views
1

는이 코드를 반환SimpleDateFormat의 구문 분석은 잘못된 값

public static String formatMinSecOrHourMinSec(final String length) { 
     try { 
      final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss", Locale.GERMAN); 
      final Date date = hhmmss.parse(length); 
      final GregorianCalendar gc0 = new GregorianCalendar(Locale.GERMAN); 
      gc0.setTime(date); 
      if(gc0.getTimeInMillis() >= 3600 * 1000){ 
       return hhmmss.format(gc0.getTime()); 
      }else{ 
       final SimpleDateFormat mmss = new SimpleDateFormat("mm:ss"); 
       return mmss.format(gc0.getTime());      
      } 
     } catch (final ParseException e) { 
      LOGGER.debug("Konnte die Länge nicht parsen: " + length + "\n" + e); 
      return length; 
     } 
    } 

나는 그것이 length1시 29분 0초로 설정되어 1시 29분 0초 경우 반환 것으로 추정하지만 29 반환 00. gc0.getTimeInMillis()이 예상보다 1 시간 적은 (3600 * 1000)을 반환하기 때문입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

+0

gc0.getTimeInMillis()을 예상보다 (* 1000 3600) 일시간 적은 반환합니다. 귀하의 진술에 따라 귀하의 상태가 거짓이며 당신이 얻는 것은 정확합니다. –

+0

시간대에 문제가 있거나 없을 수도 있습니다. 'Locale.German'에서 시간을로드하고 있습니다 만 밀리 초 단위의 시간은 1-1-1970 UTC (GMT) 자정에 상대적인 오프셋으로 반환됩니다. 이것은 예기치 않은 시간 오프셋의 원인 일 수 있습니다. 확실히 당신이 고려해야 할 것이 있습니다. – Caleryn

답변

1

java.util.Date에서 기본 표준 시간대를 사용하고 있기 때문입니다. (인쇄 시간은 ms 단위로 date에서 볼 수 있습니다). 는 시도 해결하려면 :

final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss"); 
hhmmss.setTimeZone(TimeZone.getTimeZone("UTC"));