大约两年前,我部署了一个项目,并且在 Java 中遇到了一个奇怪的问题。
以下是我的代码行,适用于除 2015 年 12 月 29 日之外的所有日期 在 Controller 中
@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 年。有人可以解释一下为什么会发生这种情况吗?
最佳答案
格式中的 Y
表示年周,而不是年日。
使用 y
代替。
就您而言:
new SimpleDateFormat("yyyy-MMM-dd")
关于java - Java 中日期的不确定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34510043/