地図データベースのタイムスタンプラUTCカレンダー(JPA)でUTCとして日経由WebService(jax-ws)
質問
この音のように簡単に行えます。
車UTC timestamp値からのDBでUTCとして日Webサービスです。
してtimestampカラムDATE_COLUMNや店舗が時間をUTCタイムゾーンになります。
とJPAたこと
@Column(name = "DATE_COLUMN")
private java.sql.Timestamp dateValue;
そして、人びとがいいことWebサービスをUTC(Jax-ws2.0いgetDateとsetDateます。
いgetDate.
public Calendar getDate()
{
Calendar calendar = Calendar.getInstance(utcTimeZone);
calendar.setTimeInMillis(dateValue.getTime());
return calendar;
}
この動作しないとしています。
この応用のデフォルトのタイムゾーンをしない'UTC'.
ここでは明確にして頂きたい。
値のDATE_COLUMN="30.11.09 16:34:48,833045000しているので世界標準時間を取得しま"2009-11-30T14:34:48.833Z"
その違いは2時間です。これは私のデフォルトのタイムゾーンを"ヨーロッパ/ヘルシンキ".
同じ問題また地図"DATE_COLUMNへ Calendar
@Column(name = "DATE_COLUMN")
@Temporal(TemporalType.TIMESTAMP)
private Calendar dateValue;
public Calendar getDate()
{
calendar.setTimeZone(utcTimeZone);
return calendar;
}
ならないようにしたい変更申請のタイムゾーンでついにソリューションとなります。
今まで二つの選択しかない。
第.オフセット計算と応用の時間帯に、UTCに追加してください後に手動で自動減の暦によるものとする。setTimeZone.
public Calendar getDate()
{
Calendar calendar = Calendar.getInstance(utcTimeZone);
calendar.setTimeInMillis(dateValue.getTime());
int offset = TimeZone.getDefault().getOffset(dateValue.getTime());
calendar.add(Calendar.MILLISECOND, offset);
return calendar;
}
第.パスdateValueとして Long
Webサービスです。は悪くないことを除いてを失わせてしまうリアルタイプの分野にwsdl.
私の想像液
@Column(name = "DATE_COLUMN")
@Temporal(type = TemporalType.TIMESTAMP, timezone = 'UTC')
private Calendar dateValue;
もっと考える傾向があるようでもありますので、実際どこかということです。については、まず関する情報を取得することができます。
解決
使用することとしました以下の解決策です。
使用 Date
のために取得日からのデータベースです。るからで Date
はtimezonelessタイプです。
@Column(name = "DATE_COLUMN")
@Temporal(TemporalType.TIMESTAMP)
private Date dateValue;
public Date getDate()
{
return dateValue;
}
とを介して送るのがWebServiceにUTC(jax-ws)を作成し UtcTimestampAdapter
変更のゾーンからのデフォルトの世界標準時間の総力を結集します。
public class UtcTimestampAdapter extends XmlAdapter<XMLGregorianCalendar, Date>
{
@Override
public XMLGregorianCalendar marshal(Date date) throws Exception
{
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
DatatypeFactory dataTypeFactory = DatatypeFactory.newInstance();
XMLGregorianCalendar xmlCalendar =
dataTypeFactory.newXMLGregorianCalendar(calendar);
//Reset time zone to UTC
xmlCalendar.setTimezone(0);
return xmlCalendar;
}
@Override
public Date unmarshal(XMLGregorianCalendar calendar) throws Exception
{
return calendar.toGregorianCalendar().getTime();
}
}
そしてこのルールをすべて Data
s分野のモジュールを追加し、パッケージの特定の設定のようです。
@XmlJavaTypeAdapter(value = UtcTimestampAdapter.class, type = Date.class)
@XmlSchemaType(name = "dateTime", type = XMLGregorianCalendar.class)
package com.companyname.modulename;
それだけです。現在の汎用ソリューションを内包すべての論理となります。やしていくために、どのような送信timezoneless日UTCとしてwebサービスその他のモジュールまで注釈を付けるパッケージです。
他のヒント
が必要な場合は、javaプロセスでの走行は、世界標準時間のタイムゾーンの最も簡単な方法では追加により、以下のJVMパラメータ:
-Duser.timezone=UTC
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
うに影響を及ぼ全JVM.
この原因となりまその他の用途に失敗すれば、期待した現地時間
少し値段が高くなりますが、設定のデフォルトのタイムゾーンの申込み @StartupBean
:
import java.util.TimeZone;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Startup
@Singleton
public class StartupBean {
@PostConstruct
public void initializeTheServer() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
}
それから、すべての解釈のDateオブジェクトに基づきUTCです。このXML整列化.