java Date对象总是少一天

时间:2018-04-20 20:36:40

标签: javascript java rest date

我有用户日期选择器,用户选择日期,然后对用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时区运行。

1 个答案:

答案 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