Datetime 泽西岛+;JodaTime=读取日期时间错误
我用的是运动衫2 我在数据库中正确发送和存储日期,甚至发送带有正确日期毫秒的JSON: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
//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);
}
}