我有用户日期选择器,用户选择日期,然后对用Java实现的休息服务进行AJAX调用。但问题是它总是返回一天前的日期对象。这是我的实施:
testDate = $("#date-select").val();
console.log(testDate)
上面的console.log打印正确的日期。 2018-04-22
但当它传递给休息服务时,它显示错误的日期:
@POST
@Path("checkDate/{testDate}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response demoService(final DemoBean demoBean)
{
System.out.println("Rest service got called:"+ demoBean.getDate());
if(demoDateConfService.setDate(demoBean.getDate())
{
return Response.ok(new Result(true)).cacheControl(NO_CACHE).build();
}
return Response.ok(new Result(false)).cacheControl(NO_CACHE).build();
}
这是休息电话的结果:
Rest service got called:Sat Apr 21 20:00:00 EDT 2018
不确定它是否与时区有关。我的笔记本电脑在EST时区运行。
答案 0 :(得分:7)
java.util.Date
是Java Core中最令人困惑的类。
我不建议使用java.util.Date
传递日期,因为它旨在存储日期和时间。
正如我在4月21日晚上8点的评论中指出的那样=格林威治标准时间4月22日午夜。在GMT时区打印您的日期,您将获得4月22日00:00:00:
SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy hh:mm:ss a z");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("Rest service got called:"+ sdf.format(demoBean.getDate()));
但我建议将日期作为字符串发送或使用java.time.LocalDate
。