从java.util.date转换为java.sql.date时返回的日期不正确

从java.util.date转换为java.sql.date时返回的日期不正确,java,eclipse,gwt,Java,Eclipse,Gwt,我正在使用EclipseJuno、GWT和java 当我皈依时 我通过以下方式获得日期: dateBoxDOB = new DateBox(); dateBoxDOB.setFormat(new DefaultFormat(DateTimeFormat.getFormat("dd-MM-yyyy"))); flexTable.setWidget(0, 1, dateBoxDOB); dateBoxDOB.getDatePicker(); 在这里,我输入1961年4月20日。然后我需要将它从ja

我正在使用EclipseJuno、GWT和java

当我皈依时

我通过以下方式获得日期:

dateBoxDOB = new DateBox();
dateBoxDOB.setFormat(new DefaultFormat(DateTimeFormat.getFormat("dd-MM-yyyy")));
flexTable.setWidget(0, 1, dateBoxDOB);
dateBoxDOB.getDatePicker();
在这里,我输入1961年4月20日。然后我需要将它从
java.util.date
转换为
java.sql.date
,然后再保存到MySQL:

java.sql.Date sqlDOB = new java.sql.Date(dateBoxDOB.getValue().getTime());
Window.alert("Util date = " + dateBoxDOB.getValue().getTime());    
Window.alert("DOB = " + sqlDOB);
java.sql.Date sqlDateArchived = new java.sql.Date(dateBoxArchived.getValue().getTime());
java.sql.Date sqlPackIn = new java.sql.Date(dateBoxPackIn.getValue().getTime());
java.sql.Date sqlPackOut = new java.sql.Date(dateBoxPackOut.getValue().getTime());
窗口警报显示的日期对于util是
-23392080000,对于sql是
1962-08-04

如何获取正确的日期(即,从sql日期算起的1961-04-20)

此外,如果日期为null并引发异常。请问我该怎么处理这件事?

这可能对你有帮助

    Calendar cal = Calendar.getInstance();
    DateFormat df=new SimpleDateFormat("dd/mm/yyyy");
    String dateStr="20/04/1961";
    Date date = df.parse(dateStr);
    cal.setTime(date);
    Date sqlDate = new java.sql.Date(cal.getTime().getTime());
    System.out.println("utilDate:" + df.format(date));
    System.out.println("sqlDate:" + df.format(sqlDate));

这个代码对我来说很好用


您之所以收到此问题,是因为您将格式定义为
dd-MM-yyyy
,并将日期输入为1961年4月20日。请注意格式“-”vs“/”的更改。

是否尝试先格式化日期?首先将dateBoxDOB.getValue().getTime()存储在日期变量中,然后使用YY-MM-dd格式化,然后尝试逻辑。从uti.date到sql.date的转换看起来不错。。您的客户机和服务器在不同的地理位置吗?听起来好像您在某处有一个月/天的混淆。如果
1961-04-20
中的
20
被视为一个月而不是一天,那么日期将显示为1962年8月4日(20个月是1年8个月)。仔细检查你的格式和输入。嗨Kaushik,你是代码的征服者!谢谢你的帮助。你好,格林。