java Date对象总是少一天

use*_*dev 2 javascript java rest date

我有用户日期选择器,用户选择日期,然后对用Java实现的休息服务进行AJAX调用.但问题是它总是返回一天前的日期对象.这是我的实现:

testDate = $("#date-select").val();
console.log(testDate)
Run Code Online (Sandbox Code Playgroud)

在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();
}
Run Code Online (Sandbox Code Playgroud)

这是Rest Call的结果:

Rest service got called:Sat Apr 21 20:00:00 EDT 2018
Run Code Online (Sandbox Code Playgroud)

不确定它是否与时区有关.我的笔记本电脑在EST时区运行.

hoa*_*oaz 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()));
Run Code Online (Sandbox Code Playgroud)

但我宁愿建议将日期作为字符串或使用java.time.LocalDate.