我在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;
}
你可以看到我在控制台的日期是2016年,因为我的系统日期是2015年!!!
同样在我的数据库2015年添加。有人可以解释一下为什么会这样吗?
答案 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;是普通的日历年。