У меня есть сервис SOAP, и этот сервис может получать дату - Date Data Type
описание этого типа
![enter image description here](https://i.stack.imgur.com/ruf0p.png)
У меня также есть класс JAXB, сгенерированный из XSD, и в этом классе присутствует такая дата, как XMLGregorianCalendar
:
@XmlAttribute(name = "billDate", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar billDate;
Теперь мне нужно сохранить эту дату в базе данных. В БД Oracle у меня есть столбец с типом DATE
. В PostgreSQl - TIMESTAMP
тип. В сущности:
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "BILL_DATE")
private Date billDate;
Мой вопрос:
Если вы верите документации (и можете верить, как я проверял), тогда я могу отправить дату в следующих форматах: 2002-09-24
или 2002-09-24Z
или 2002-09-24+06:00
. Без часового пояса и с часовым поясом. Теперь мне нужно сохранить эту дату в БД и после этого мне нужно восстановить ее из БД в правильном формате (с часовым поясом или без). Когда я сохраняю его в БД, я использую этот метод конвертации:
public static java.util.Date asDate(XMLGregorianCalendar xgc) {
if (xgc == null) {
return null;
} else {
return xgc.toGregorianCalendar().getTime();
}
}
И после этого сохранить java.util.Date
. Но когда я выбираю эту дату и конвертирую в
XMLGregorianCalendar
- я получаю дату с часовым поясом:
private static DatatypeFactory df = null;
static {
try {
df = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException dce) {
throw new IllegalStateException("Exception while obtaining DatatypeFactory instance", dce);
}
}
public static XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) {
if (date == null) {
return null;
} else {
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeInMillis(date.getTime());
return df.newXMLGregorianCalendar(gc);
}
}
поэтому, когда я получил дату: 2002-09-24
сохраните ее в БД, выберите из БД и конвертируйте в XMLGregorianCalendar
- у меня есть 2002-09-24+03:00
Но мне нужно 2002-09-24
. И если я получу дату 2002-09-24+03:00
, мне нужно 2002-09-24+03:00
.