2013-07-20 2 views
0

유닉스 박스에서 실행되는 일부 코드를 변경하려고합니다. 런던의 현재 날짜와 시간을 기준으로 데이터베이스 필드의 시간을 설정합니다.Java 날짜 및 시간

내가 사용하는 방법은 다음과 같습니다.

private static Date getCurrentTime() { 
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS"); 
    format.setTimeZone(TimeZone.getTimeZone("Europe/London")); 

    Calendar cal = Calendar.getInstance(); 
    Date currentDate = cal.getTime(); 

    try { 
     return format.parse(format.format(currentDate)); 
    } catch (ParseException e) { 
     log.error("Error occured while parsing date-->" + e.getMessage()); 
    } 
    return new Date(); 
} 

private String getStringFromDate(Date date){ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS"); 
    return sdf.format(date); 
} 

는 메시지가 데이터베이스에 삽입 한 다음 (이 호스팅 그게 북미 시간으로 설정된다) 제조 UNIX 상자 자바 응용 프로그램에 의해 처리 될 때 뒤에 시간이다 (BST로 설정되지 않음).

Eclipse에서 데스크탑에서 동일한 코드를 실행하면 데이터베이스에 정확한 시간이 표시됩니다.

이 문제의 원인이 무엇인지 확신 할 수 없으며 누군가가 도움을 줄 수 있기를 기대했습니다. 두 번째 눈에

감사

편집 ***, 유닉스 상자도 로그 파일 내가 내 코드에 반대 문제를 일으키는 자사의 유닉스 가정 그래서 기준으로 뒤에 한 시간입니다.

답변

1

Date 인스턴스 (당신이 뭔가 잘못하지 않는 한 그것이 있어야 또는) UTC에 항상 입니다. UTC로 db에 날짜를 저장하고 사용자에게 제시 할 때 원하는 모든 시간대로 변환해야합니다. 다른 것은 문제를 묻는 것입니다.

동일한 TimeZone에서 Date 인스턴스의 형식을 지정한 다음 구문 분석하는 코드는 의미가 없습니다.

+0

"UTC로 데이터베이스에 날짜를 저장해야합니다."- 거의 그렇게하지 않으면 시간대 정보가 손실됩니다. 1970 년 이전에는 자정 1 월 1 일 자정 GMT가되었습니다. – fge

+0

@fge - _original_ timezone이 필요하다면 그 시간도 저장해야합니다. 그게 내가 말한 것과 모순되는거야. UTC로 날짜를 저장해도 시간대를 저장할 필요가 있는지 여부는 영향을받지 않습니다. 당신이 말하고있는 것은 db의 텍스트에 텍스트를 저장하는 경우에만 적용됩니다. 나는 날짜/시간 열을 추측하고 있었다. – jtahlborn

+0

좋습니다. 나는 너의 대답을 잘못 해석했다, 미안하다. – fge