Datetime 泽西岛+;JodaTime=读取日期时间错误

Datetime 泽西岛+;JodaTime=读取日期时间错误,datetime,jersey,jodatime,Datetime,Jersey,Jodatime,我用的是运动衫2 我在数据库中正确发送和存储日期,甚至发送带有正确日期毫秒的JSON: //Debbuged using LoggingFilter {"id":3,"start":1460304000000,"end":1460307600000} 如您所见,开始是:“Sun Apr 10 2016 13:00:00”,结束是:“Sun Apr 10 2016 14:00:00”,但当我调试客户端时: SaveablePersonalSchedule dto = response.readE

我用的是运动衫2

我在数据库中正确发送和存储日期,甚至发送带有正确日期毫秒的JSON:

//Debbuged using LoggingFilter
{"id":3,"start":1460304000000,"end":1460307600000}
如您所见,开始是:“Sun Apr 10 2016 13:00:00”,结束是:“Sun Apr 10 2016 14:00:00”,但当我调试客户端时:

SaveablePersonalSchedule dto = response.readEntity(SaveablePersonalSchedule.class);
我得到这个日期:

START: 2016-04-10T16:00:00.000Z
END: 2016-04-10T17:00:00.000Z
3小时前搞错了。我测试过的所有其他时间都会发生这种情况:日期是正确的,时间是3小时+

有没有办法解决这个问题? 我知道我可以从给定的日期中减去3个小时,但我相信这应该是最后的选择。太难看了哈哈哈

更多信息 客户端创建:

client = ClientBuilder.newClient(new ClientConfig()
        .register(new JerseyObjectMapperProvider())
        .register(new Jackson1Feature())
        .register(new MultiPartFeature()));
创建ObjectMapper是我发现的让jersey发送正确DateTime值的方法,因为服务器一开始接收到的数据是错误的。在这之后,我正确地发送了数据,并且能够正确地将其存储在mysql上

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

    return result;
}
真正的问题 如何设置泽西岛的时区?我以为它在ObjectMapper上,但我猜错了

如您所见,开始是:“2016年4月10日星期日13:00:00”,结束是:“2016年4月10日星期日14:00:00”

也许在你的时区,但在UTC,这些毫秒代表16:00和17:00,所以你得到的结果是正确的


如果您需要,请将其转换为本地时区。

这应该是时区的问题。将所有内容写入UTC时区,读取UTC,然后转换为用户的目标时区

下面是一个java示例()


好的,这是一种在Jersey it self上设置时区的方法,以便它已经转换了时区吗?一个好的做法是存储时区UTC,以便您始终知道时区是UTC。然后(在客户端)根据客户机时区(例如Javascript)将其呈现给客户机。如果你需要更多的帮助,可以告诉我。没问题,但我需要知道如何制作球衣,以便为我进行此转换。你知道怎么做吗?这是我需要的,但我想让泽西帮我做。你知道怎么做吗?@Marconronha你可以调用
jerseyDateTime.toDateTime(DateTimeZone.getDefault())
。我找不到它Asylias:(你能帮我吗?我以为它会在ObjectMapper上,但我想不会。
    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);
    }

}