2012-03-19 6 views
0

2 개의 서버에 두 개의 프로그램이 있습니다. 프로그램 A는 영국 서버에 있고 프로그램 B는 미국 서버에 있습니다.Java에서 표준 시간대 변환을 적용하지 않고 두 개의 다른 표준 시간대 사이에 Date 객체 전달

프로그램 A에서 프로그램 B까지 날짜 개체를 전달해야합니다. 그러나 프로그램 B에서 날짜 개체를 가져 오면 표준 시간대 변환을 사용하여 개체를받습니다. 이 표준 시간대 변환을 적용하지 않고 한 서버에서 다른 서버로 날짜 개체를 전달하려면 어떻게해야합니까?

참고 :이 작업은 다음과 같이 Calender 개체를 통해 수행 할 수 있습니다. 하지만 제 경우에는 Date 객체를 사용하고 싶습니다. 프로그램 B에서

: 나는 직렬화 구현하고 있기 때문에

Date checkInDate = new Date(cal1.get(Calendar.YEAR) - 1900 , cal1.get(Calendar.MONTH) , cal1.get(Calendar.DATE), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE), cal1.get(Calendar.SECOND)); 
Date checkOutDate = new Date(cal2.get(Calendar.YEAR) - 1900 , cal2.get(Calendar.MONTH) , cal2.get(Calendar.DATE), cal2.get(Calendar.HOUR_OF_DAY), cal2.get(Calendar.MINUTE), cal2.get(Calendar.SECOND)); 
+1

java.util.Calendar는 날짜를 나타내는 데 사용되며 날짜 변환도 java.util.Date의 메소드 대부분이 사용되지 않습니다 ... 왜 Calendar를 사용하지 않으시겠습니까? – sachinrahulsourav

+1

java.util.Date는 절대 시간대이며 시간대가 없습니다. 예상대로 작동하지 않는 코드의 예는 서버간에 객체를 전달하는 데 사용하는 메소드에 대한 정보를 질문 :) 이해하는 데 매우 도움이됩니다. – Affe

+0

날짜를 어떻게 전달합니까? 웹 서비스? DB와 JDBC를 통해? 다른 것? 대답은 전송 (GMT)이 좋은 해결책 인 '알려진'시간대로 변환하는 것이 일반적이지만 각 전송과 다를 수 있습니다. 또한 TZ 변환을 원하지 않는 이유는 무엇입니까? – ptyx

답변

0

, 나는 내가 너무 다음과 같은 방법을 사용할 수 있습니다 것을 발견했다.

private void writeObject(ObjectOutputStream oos) throws IOException { 
    oos.defaultWriteObject(); 
    if (null != checkInDate) 
     oos.writeUTF(new java.text.SimpleDateFormat("yyyy-MMM-dd hh:mm").format(checkInDate)); 
} 

private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { 

    ois.defaultReadObject(); 
    try { 
     setCheckInDate(new java.text.SimpleDateFormat("yyyy-MMM-dd hh:mm").parse(ois.readUTF())); 
    } catch (ParseException e) { 

    } 
} 
1

당신은 시대부터의 밀리 세컨드 수를 제공 Date.getTime()을 사용하여 날짜 (1970 년 1 월 1 일 00:00:00 GMT)를 serialising 오프 훨씬 더 좋을 것이다. 이는 특정 시점을 완전히 모호하게 참조합니다. Date(long date) 생성자를 호출하여 날짜를 다시 만들 수 있습니다.

+0

SimonC 아이디어에 감사드립니다. – namalfernandolk

+0

이것은 필요하지 않습니다. Date가 serialize되면 [해당 값을 정확하게 기록합니다] (http://docs.oracle.com/javase/6/docs/api/serialized-form.html#java.util.Date). Namal은 'Date'의 성가신 행동 때문에가 아니라 뭔가 잘못하고 있기 때문에 문제가 있습니다. –

+0

@TomAnderson, 당신 말이 맞아요, 먼저 확인 했어야했는데. – SimonC