我已經在2年前部署了一個項目,並且我一直面臨Java中的一個奇怪問題。Java中日期的不確定行爲
以下是我的工作是所有日期的除了29-癸2015年 在控制器代碼行
@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年添加。有人能解釋我爲什麼會發生這種情況嗎?
應該是'yyyy-MMM-dd' – sidgate
你忘了告訴我們問題是什麼。此外,不要使用字符串連接來查詢參數。使用命名參數。並傳遞Date類型的參數,而不是傳遞一個字符串,其格式爲數據庫,區域設置和時區相關。 –
YYYY是週年,請參閱https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getWeekYear()。簡單地說,在上一週的最後一週,除非整整一週適合上一年,否則將是下一年的一部分。 –