2013-05-23 5 views
3

하나의 입력 문자열 형식에서 다른 형식으로 날짜를 변환해야하는 Java 메소드가 있습니다. 입력 및 출력 형식은 밀리 초 세부 사항을 모두 보유해야합니다. 이는 시간 소인이 수 밀리 초 정도 떨어져있는 프로세스 추적 솔루션을위한 것입니다.문자열 입력을 밀리 초 단위로 변환하는 방법

SimpleDateFormat은 모든 밀리 초 데이터를 잃어 버리고 있으며 초 및 밀리 초 동안 난수를 반환하는 것처럼 보입니다.

입력 날짜 문자열 "2013년 5월 23일 12 : 32 : 13.45133" 입력 데이터 형식 "MM/DD/YYYY HH : MM : ss.SSSSS" 출력 데이터 형식 "yyyyMMddhhmmssSSS가"

위의 입력 날짜 및 형식이 주어지면 결과 날짜 문자열은 20130523123258133입니다. 이것은 입력 초에서 완전히 벗어났습니다.

입력 형식은 다를 수 있지만 출력 형식은 항상 동일해야합니다.

입력 형식이 변경 될 수 있기 때문에
 
+++ABM dateSeq: [inputDt=05/23/2013 12:32:13.45133] [inputFormat=MM/dd/yyyy HH:mm:ss.SSSSS] [result=20130523123258133] 

, 내가 수동으로 특정 패턴에 의존하는 입력 문자열을 구문 분석 할 수 없습니다 : 런타임에서

private long dateSequencer(String inputDt, String inputFormat) { 
    long result = 0; 
    try { 
     // Convert input date into yyyyMMddHHmmssSSS format for sequencing 
     SimpleDateFormat dtFrmt = new SimpleDateFormat(inputFormat); 
     Date dt = new Date(); 
     dt = dtFrmt.parse(inputDt); 
     // input String converted to Date, now reformat to Long 
     dtFrmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); 
     String reFrmt = dtFrmt.format(dt); 
     result = Long.parseLong(reFrmt); 
    } catch (Exception ex) { 
     System.out.println("++++ Exception converting dateSequencer: " + ex.toString()); 
    } 
    System.out.print("+++ABM dateSeq: [inputDt=" + inputDt + "] [inputFormat=" + inputFormat + "] [result=" + result +"]"); 
    return result; 
} 

로그 파일 항목 : 아래

는 현재의 방법입니다 . 이 때문에 패턴을 전달할 수 있도록 허용하고 SimpleDateFormat을 사용하여 Date로 변환 한 다음 다시 String으로 변환합니다.

안정적으로 어떻게해야합니까? 주어진 입력 날짜 문자열을 표준 형식으로 변환하는보다 효율적인 방법이 있습니까?

감사합니다.

답변

0

당신은 가정 수 있다면 모든 경우에 월, 일, 분, 초 2 자리 숫자, 연도는 4 자리 숫자를 가지고 있으며 밀리 초 3 자리를 그냥 패턴을 간단히 할 수있는, 다른 다음

public static long convert(String inputDt, String inputFormat) { 
    int dd = inputFormat.indexOf("dd"); 
    int MM = inputFormat.indexOf("MM"); 
    int yyyy = inputFormat.indexOf("yyyy"); 
    int HH = inputFormat.indexOf("HH"); 
    int mm = inputFormat.indexOf("mm"); 
    int ss = inputFormat.indexOf("ss"); 
    int SSS = inputFormat.indexOf("SSS"); 
    return Long.valueOf(inputDt.substring(yyyy,yyyy+4) + inputDt.substring(MM, MM+2) + inputDt.substring(dd, dd+2) + inputDt.substring(HH, HH+2) 
      + inputDt.substring(mm, mm+2) + inputDt.substring(ss, ss+2) + inputDt.substring(SSS,SSS+3));   
} 

convert("05/23/2013 12:32:13.133", "MM/dd/yyyy HH:mm:ss.SSS") yields 20130523123213133 
0

입력 날짜 문자열 : "05/23/2013 12 : 32 : 13.45133"에는 밀리 초 5 자리가 포함됩니다. 그리고 그것은 불가능합니다 ... 3 자릿수 여야합니다. 따라서 45133 밀리 초는 45 초 및 133 밀리와 같습니다. 입력 한 날짜 문자열은 '05/23/2013 12 : 32 : 58.133'입니다.

관련 문제