2014-01-17 97 views
0

在我的應用程序中,我允許我的用戶輸入一些日期,我應該保存在數據庫中。現在,由於我的一些應用程序用戶位於全球不同的位置,並且每個用戶都有自己的日期/時間格式,我想從他們接受任何日期格式,然後將這些格式更改爲固定格式,然後我可以將其保存在數據庫中。Java日期格式問題

然而,我現在的問題是,我試圖從用戶輸入到我的應用程序格式更改日期fromat時得到一個錯誤,下面是我目前正在與

  1. 實體領域工作的代碼:

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name="DDATE", nullable=false, unique=false) 
    private Date dDate; 
    
  2. 控制器代碼保存在DB:

    Date rDate, dDate; 
    String Date1 = request.getParameter("Date1");  
    String Date2 = request.getParameter("Date2"); 
    
    //Here the date get display for example as 01/29/2014 (i.e. MM/DD/YYYY) 
    System.out.println("Date1:: "+ Date1); 
    System.out.println("Date2:: "+ Date2); 
    
    SimpleDateFormat parseRDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    SimpleDateFormat parseDDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    try { 
        //#########Crashes in the next two lines#########... 
        rDate = (Date)parseRDate.parse(Date1); 
        dDate = (Date)parseDDate.parse(Date2); 
    
    } catch (ParseException e) { 
        e.printStackTrace(); 
    } 
    

那麼有人可以請建議我如何格式化我的用戶輸入的任何日期到應用程序的靜態日期格式?

感謝

+3

預期的格式('YYYY-MM -dd HH:mm:ss')與實際值('01/29/2014')不符。嘗試使用'MM/dd/yyyy'作爲格式代替... – MadProgrammer

+3

沒有通用的「找出用戶的意思」日期解析功能。您需要檢查用戶的區域設置並選擇預期的格式。如果01/02/2013是1月2日或2月1日,那麼java應該如何猜測? – Affe

+0

@Affe如果我將日期分隔爲MM和DD以及YYYY編碼/解碼日期,換句話說,這將允許使用用戶輸入的任何可能的日期格式嗎?如果是,是否有Java方法來編碼/解碼日期? – MChan

回答

3

我的建議是使用http://en.wikipedia.org/wiki/ISO_8601爲大家普遍的日期。

如果任何人都可以進入任何字符串,你永遠不會知道,如果75年8月12日是12月8日或8月12日

從維基百科:

Date and time (current at page generation) 
expressed according to ISO 8601: 
Date: 2014-01-11 
Combined date and time in UTC: 2014-01-11T12:21:05+00:00 
2014-01-11T12:21Z 
Week: 2014-W02 
Date with week number: 2014-W02-6 
Ordinal date: 2014-011 
+0

回答編輯鏈接到標準和例子 – 2014-01-17 10:36:04

+0

請注意讀者:[java.time](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html )取代舊的遺留日期 - 時間類的類在缺省情況下在解析/生成字符串時使用這些ISO 8601格式。 –