SOAP 웹 서비스에서 timzone 정보없이 datetime을받습니다. 따라서 축 디시리얼라이저는 UTC로 가정합니다. 그러나 datetime은 시드니 시간대에 있습니다. 나는 시간대 오프셋을 빼서 문제를 해결했다.Java에서 시간을 변경하지 않고 시간대 변경
Calendar trade_date = trade.getTradeDateTime();
TimeZone est_tz = TimeZone.getTimeZone("Australia/Sydney");
long millis = trade_date.getTimeInMillis() - est_tz.getRawOffset();
trade_date.setTimeZone(est_tz);
trade_date.setTimeInMillis(millis);
그러나이 솔루션이 일광 절약 시간제를 고려하는지 잘 모르겠습니다. 모든 작업은 UTC 시간이기 때문에해야한다고 생각합니다. Java에서 시간을 조작 한 경험이 있습니까? 이 문제를 해결하는 방법에 대한 더 나은 아이디어?
나는 항상 지금까지, 그리고 고정 된 유일한 단위를 사용하여 날짜를 모든 언어로 조작하십시오. 그 단위는 두 번째 (또는 밀리 초)입니다. 59 또는 61 초가 걸리며 23 또는 25 시간이 걸립니다. 60 * 60 +/- 1 초 등의 시간이 있습니다. 모든 날짜는 기원 이후 (밀리) 초로 저장됩니다. 그것이 그들이 DB에있는 방식입니다. 그것이 정렬 된 방식입니다. 내가 시간대/yyyy-mm-dd를 수행하는 유일한 시간은 사용자에게 표시되어야 할 때 (또는 날짜가 초 단위로 표현 가능하다는 것을 이해하지 못하는 깨진 API를 사용할 때)입니다. – SyntaxT3rr0r
@WizardOfOdds. 그것은 당연한 조언이지만 OP는 웹 서비스 (아마도 제 3 자)로부터 타임 스탬프를 받고 제 3 자 라이브러리를 사용하여 요청을 처리하는 것으로 명확히 게시했습니다. 분명히 그의 직접 통제에서 벗어나는 것들이 몇 가지 있으며, 표준 시간대에서 시간대로 변환하는 것은 java.util.Calendar를 사용하면 분명히 솔직하지 않을 것입니다. –
의견을 보내 주셔서 감사합니다. Axis를 사용하여 WSDL 파일에서 웹 서비스 스텁을 생성합니다. 제 3 자 웹 서비스에 연결하기 위해 생성 된 클래스를 사용하고 있습니다. 사실, 표준 시간대 정보 또는 UTC로 날짜/시간 필드를 전송해야합니다. Axis에서 기대하는 것입니다. 하지만 그건 내 선택이 아니야. –