2016-04-04 6 views
1

ジャージー+ JodaTimeは=読書dateTimeに間違った私は、私が送信し、正しい日付のミリ秒でJSONを送信しても、データベースに正しく日付を格納し、ジャージー2.</p> <p>を使用してい

//Debbuged using LoggingFilter 
{"id":3,"start":1460304000000,"end":1460307600000} 

を「日2016年4月10日夜01時〇〇分00秒」と最後は次のとおりです:あなたが見ることができるように、開始され

SaveablePersonalSchedule dto = response.readEntity(SaveablePersonalSchedule.class); 

I:「日2016年4月10日午後2時00分00秒」が、私は、クライアントをデバッグするときこの日付を取得:

START: 2016-04-10T16:00:00.000Z 
END: 2016-04-10T17:00:00.000Z 

3時間で間違っていました。これは私がテストした他のすべての時間で起こります:日付は正しい、時間は3時間+です。

これを修正する方法についてのご意見はありますか? 私は与えられた日付から3時間を引くことができますが、私はそれが最後の手段であるべきだと思います。ただ、あまりにも醜い笑

詳細情報

クライアントの作成:ObjectMapperの作成

client = ClientBuilder.newClient(new ClientConfig() 
     .register(new JerseyObjectMapperProvider()) 
     .register(new Jackson1Feature()) 
     .register(new MultiPartFeature())); 

は、サーバーが最初に間違ったことを受けていたので、私は、ジャージが正しいDateTime値を送信するために見つける方法でした。この後、私はデータを正しく送信し、私はmysqlに正しく格納することもできました。

private static ObjectMapper createDefaultMapper() { 
    final ObjectMapper result = new ObjectMapper(); 
    result.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false); 

    return result; 
} 

本当の問題ジャージーにタイムゾーンを設定する方法

?私はそれがObjectMapper上にあると思ったが、私は間違っていた。

答えて

1

あなたが見ることができるように、開始は次のとおりです。「日2016年4月10日午後1時00分○○秒」と終わりがある:「日2016年4月10日夜02時00分○○秒」あなたの時間でたぶん

UTCでは、これらのミリ秒は16:00と17:00を表します。結果は正しいです。

必要な場合は、ローカルタイムゾーンに変換してください。

+0

です。どのようにするか知っていますか? –

+0

@MarcoNoronha 'jerseyDateTime.toDateTime(DateTimeZone.getDefault())'を呼び出すことができます。 – assylias

+0

私はそれを見つけることができません:(私を助けることができますか?それはObjectMapperにあると思っていましたが、私はそう思わないでしょう) –

1

これはタイムゾーンの問題です。 UTCタイムゾーンで電子メールを作成し、UTCで読み込んだ後、ユーザーのターゲットタイムゾーンに変換します。ここで

は、私は必要なものだが、私はジャージが私のためにそれをしたいそのJavaの例(and gist here

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

import org.junit.Test; 

public class DateTimeTest { 

    public static final String PARIS_TZ="GMT+1"; 


    @Test 
    public void datetime(){ 
     SimpleDateFormat formatterGMT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
     SimpleDateFormat formatterPARIS = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
     formatterPARIS.setTimeZone(TimeZone.getTimeZone(PARIS_TZ)); 

     Date date = new Date();  

     log("UTC: "+ formatterGMT.format(date)); 
     log("PARIS:"+ formatterPARIS.format(date)); 

    } 


    public void log(String s){ 
     System.out.println(s); 
    } 

} 

Check timezone doc here

+0

これはジャージーのタイムゾーンを設定しているので、すでにそれを変換していますか? –

+0

実際にはタイムゾーンUTCを保存して、タイムゾーンがUTCであることを常に知っているようにしてください。クライアント側ではクライアントタイムゾーンに応じてクライアントに提示します(例:Javascriptで取得)。より多くの助けが私に教えてくれる。 – jeorfevre

+0

問題はありませんが、私はこの変換をするためにどのようにジャージを作ることができるかを知る必要があります。どのようにするか知っていますか? –

関連する問題