2011-05-02 5 views
0

웹 서비스에서 반환되는 Java Date 객체에서 표준 시간대 구성 요소를 제거하는 방법이 있습니까?웹 서비스 응답 시간대 제거

예를 들어 오전 12시에 시작 날짜가 있습니다. 나는 그것이 클라이언트의 12AM 현지 시간으로 사용되기를 원합니다.

비누 메시지에 시간대 구성 요소가 없으면 로컬 시간대가 사용됩니다. 2 가지 다른 옵션이 있습니다. 어느 것이 든 클라이언트 쪽에서 날짜에 산술 연산을하고 싶습니다. (정말 정말하고 싶지 않습니다.) 일, 월, 연도를 정수로 유지하는 새로운 날짜 클래스를 만듭니다. 나는 시간 정보가 필요 없다.) 후자의 옵션은 실질적인 리팩토링을 필요로하므로 soap 메시지에서 시간대 정보를 잘라내는 것이 바람직합니다.

클라이언트는 .NET에서 작성되므로 클라이언트 측에서 날짜 해석 방법을 변경하면 동일한 목표를 달성 할 수 있습니다.

답변

1

Java Date 개체에 시간대 구성 요소가 없습니다. 시간대에 대한 개념이 전혀 없습니다. 1970 년 1 월 1 일 자정 (UTC)부터 항상 밀리 초입니다.

날짜 및 시간의 SOAP 표현에 대해 많이 알지 못합니다 ... 날짜이 (날짜 및 시간 대신에) 모두 필요하면 잘 할 수 있다고 설득 할 수 있다면 좋습니다. 그렇지 않으면, 당신은 UTC로 모든 것을 할 것을 제안하지만 은 클라이언트에서 로컬 시간이으로 간주합니다. 비록 날짜 만 다루는 경우, 이것은 너무 나쁘지 않아야합니다. 자정이 모든 시간대의 모든 날짜에 항상 발생하는 것은 아니지만, 두 번 발생할 수 있습니다.

기본적으로 .NET이나 Java에는 알맞은 기본 제공 날짜 및 시간 API가 없다는 점이 유감입니다. Java에서 Joda TimeLocalDate의 소리로 사용하여 정확히 (현지 시간대의 날짜)을 나타낼 수 있습니다. .NET에서는 (결국)이 Noda Time이지만 아직 준비가되어 있지 않습니다. 이 두 가지가 각각의 기본 플랫폼에 존재하더라도 SOAP을 설득하여 적절히 직렬화해야합니다. (

2

나는 내 문제에 대한 해결책을 찾았다 고 생각합니다. @XmlJavaTypeAdapter를 사용하여 방법을 변경했습니다. 날짜 클래스는 여기

내가 사용하는 DateAdapter이다. XML로 마샬링.

import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class DateAdapter extends XmlAdapter<String, Date> { 
// the desired format 
private String pattern = "yyyy-MM-dd"; 

public String marshal(Date date) throws Exception { 
return new SimpleDateFormat(pattern).format(date); 
} 

public Date unmarshal(String dateString) throws Exception { 
return new SimpleDateFormat(pattern).parse(dateString); 
} 
} 

그리고 나는 내가 'YYYY-MM-DD'날짜를 사용하고 싶어 내 게터 모두에 다음과 같은 주석을 사용 형식.

@XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class) 
관련 문제