2016-04-21 25 views
0

我需要格式化我的輸入日期字符串。添加額外年份的日期格式轉換

輸入日期字符串:28-01-1983(dd-MM-yyyy)

預計日期字符串:1983-01-28 (yyyy-MM-dd)

我用下面的程序。但我沒有得到正確的輸出。

public static String formateDate(String oldFormat, String newFormat, String date) { 
     final String OLD_FORMAT = oldFormat; 
     final String NEW_FORMAT = newFormat; 

     String oldDateString = date; 
     String newDateString = null; 

     try { 
      SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT); 
      Date d = sdf.parse(oldDateString); 
      sdf.applyPattern(NEW_FORMAT); 
      newDateString = sdf.format(d); 
     } 
     catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return newDateString; 
} 

調用方法:

public static void main(String[] args) { 
     String formatDob = formateDate("MM-dd-yyyy", "yyyy-dd-MM", "28-01-1983"); 
     System.out.println("Formated DOB:"+formatDob); 

}

現在我得到的輸出:Formated DOB:1985-01-04

爲什麼我的代碼產生錯誤的輸出?我使用JDK 1.7

+0

舊格式應該是'dd-MM-yyyy'。沒有一個月28 –

回答

3

您正在以舊格式傳遞月份爲28,其中(12 + 12 + 4)表示April即將到來的第三年的月份。

所以,你的舊格式(MM-dd-yyyy)將解析日期(1983 + 2 years) = 1985和4 個月第三年是April所以你將有日期1st April 1985的。您的舊日期格式應爲dd-MM-yyyy

0

考慮轉換

你的MM-dd-yyyy格式的第一部分,你有28-01-1983

日期字符串,因爲沒有一個月28我建議的格式應是dd-MM-yyyy

0

變化

formateDate("MM-dd-yyyy", "yyyy-dd-MM", "28-01-1983"); 

formateDate("MM-dd-yyyy", "yyyy-dd-MM", "01-28-1983"); 

你是在地方過期的月份。

相關問題