Java中Date的不确定行为

时间:2015-12-29 11:28:27

标签: java hibernate spring-mvc java-7

我在2年前就已经部署了一个项目,我在Java中遇到了一个奇怪的问题。

以下是我的代码行,适用于除2015年12月29日之外的所有日期 在控制器

@RequestMapping(value = "/user/viewTimeSheet")
public ModelAndView viewtimesheet(ModelMap model,@RequestParam(value = "msg", required = false) String msg,@RequestParam(value = "error", required = false) String error) {
    if(SessionManagement.isSessionAlive()!=true)
    {
        return new ModelAndView("redirect:../pleaseLogin");
    }
    if (error != null) {
        model.put("error", error);
    }

    if (msg != null) {
        model.put("msg", msg);
    }
    System.out.println(new SimpleDateFormat("YYYY-MMM-dd").format(new Date()));
    model.put("total", timeSheetTempDAO.getCurrentDayHours(SessionManagement.getCurrentUserId(),new SimpleDateFormat("YYYY-MMM-dd").format(new Date())));
    model.put("timeSheetTempList",timeSheetTempDAO.getDailyTimeSheets(SessionManagement.getCurrentUserId()));
    return new ModelAndView("viewTimeSheetTempTile");
}

在DAO中

@Override
@SuppressWarnings("unchecked")
public List<TimeSheetTemp> getDailyTimeSheets(int userId) {
    List<TimeSheetTemp> list = new ArrayList<TimeSheetTemp>();
    Session session= HibernateUtil.getSessionFactory().openSession();
    Transaction tx = session.beginTransaction();
    Query q = session.createQuery("FROM TimeSheetTemp t where userId="+userId +" and date='"+new SimpleDateFormat("YYYY-MMM-dd").format(new Date())+"' order by id");
    list = (List<TimeSheetTemp>) q.list();
    tx.commit();
    session.close();
    for(TimeSheetTemp t : list){
        if(t.getStatus().getId()!=1){
            if(t.getReviewedBy()!=null && t.getReviewedBy()!=0){
                t.setReviewedByName(getFullName(t.getReviewedBy()));
            }
        }
    }
    return list;
}

java date error

你可以看到我在控制台的日期是2016年,因为我的系统日期是2015年!!!

同样在我的数据库2015年添加。有人可以解释一下为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

Y格式为周年,而不是日期。

改为使用y

在你的情况下:

new SimpleDateFormat("yyyy-MMM-dd")

答案 1 :(得分:1)

SimpleDateFormat错了!

使用

System.out.println(new SimpleDateFormat("yyyy-MMM-dd").format(new Date()));

而不是

 System.out.println(new SimpleDateFormat("YYYY-MMM-dd").format(new Date()));

&#34; YYYY&#34;是以周为基础的日历年。

&#34; yyyy&#34;是普通的日历年。