나는 적절한 직렬화 가능 날짜 전용 클래스를 찾고있다. 중앙 시간대의 서버를 보유하고 있으므로 동부의 사용자가 2010-11-23으로 날짜를 입력하고 Pacific의 사용자가 2010-11-23으로 (그리고 그 반대로) 입력하도록하십시오.Joda LocalDate - 여전히 즉석입니까?
java.util.Date
은 시간에 민감한 순간이므로 나에게 적합하지 않습니다. 바퀴를 재발 명하고 싶지 않아서, 나는 Joda Time에게 시도를하기로 결정했다. 개요에 따르면 LocalDate
은 "시간이없는 현지 날짜를 나타내는 클래스 (시간대 없음)"입니다.
불행히도, 시간대에 독립적이지는 않습니다. 데이터베이스에는 2010-11-23이 있습니다. 서버에서 new LocalDate(java.sql.Date)
으로 LocalDate
으로 변환합니다. date.toString()
인쇄 2010-11-23.
, date.ToString()
인쇄 2010-11-22와 date.getDayOfMonth()
는 22이다 그러나 date.toDateTimeAtStartOfDay()
는 2010-11-23T00 생산 : 00 : 00.000-08 : 00.
내가 잘못 했나요? Joda에 적절한 날짜 전용 시간대 감식 클래스가 있습니까?
EDIT : 데이터베이스에서 시간대를 구분하지 않는 열 (Postgres에서 DATE
)을 사용하고 있습니다. 서버는 데이터베이스와 동일한 시간대에 있으므로 날짜를 잘 읽습니다. 그것은 문제가되지 않습니다. 한 시간대에서 인스턴스화 된 모든 Java 시간 유형에서 동일한 시민 (부분) 날짜 값을 갖는 Java 유형을 찾고 있습니다.
EDIT 2 : 서버에 모든 것이 올바르게로드되고 UTC 시간대가 있습니다. 조사한 결과 나는 ISOChronology
의 버그라고 생각합니다. 클라이언트에서는 America/Los_Angeles로 압축을 풉니 다. 그 이유는 serialization이 다음과 같이 이루어지기 때문입니다. transient 필드를 사용하여 행운을 비키는 것이 좋습니다.
시간대를 무시하려면 모든 장소에서 UTC/GMT를 사용할 수 있습니까? –
어떤 Joda 버전을 사용하고 있으며 객체는 어떻게 직렬화됩니까? 표준 Java 직렬화의 경우 Stub 클래스에는 iZone 필드의 "수동"처리를위한 적절한 writeObject/readObject 메소드가 있지만 IIOP, SOAP 또는 객체 인스턴스에서 필드 값을 자동으로 추출하려는 다른 직렬화 구현에서는 실패 할 수 있습니다 . – jarnbjo
@jarnbjo 1.6.2. Serializer는 괜찮습니다. 위에서 지적한 문제는 'Stub.iZone'이 일시적이라는 것입니다. –