2015-12-29 45 views
0

我已經在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; 
} 

java date error

你可以看到我的約會在控制檯是2016年,我的系統日期是2015年!

也在我的數據庫2015年添加。有人能解釋我爲什麼會發生這種情況嗎?

+1

應該是'yyyy-MMM-dd' – sidgate

+0

你忘了告訴我們問題是什麼。此外,不要使用字符串連接來查詢參數。使用命名參數。並傳遞Date類型的參數,而不是傳遞一個字符串,其格式爲數據庫,區域設置和時區相關。 –

+0

YYYY是週年,請參閱https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getWeekYear()。簡單地說,在上一週的最後一週,除非整整一週適合上一年,否則將是下一年的一部分。 –

回答

3

格式爲Y的格式爲週年,而不是日年。

改爲使用y

你的情況:

new SimpleDateFormat("yyyy-MMM-dd") 
+0

謝謝你的支持。 –

1

SimpleDateFormat是錯誤的!使用

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

代替

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

YYYY」 是基於週日歷年。

yyyy」是普通日曆年。

+0

謝謝你的支持。 –