2013-07-09 51 views
1

我正在使用JAXB和joda時間2.2。將數據從Mysql備份到XML並將其還原。在我的表格中,我有一個格式爲「16-Mar-05」的日期屬性。我成功地將它存儲在XML中。但是當我想從XML讀取它並將其放回到Mysql表中時,我無法獲得正確的格式。以「dd-MMM-yy」格式輸入joda LocalDate的字符串

這是我的XMLAdapter類,在unmarshal方法中,輸入字符串是「16-Mar-05」,但我無法獲得格式爲「16-Mar-05」的localDate變量,儘管我正在設置模式到「dd-MMM-yy」。我發佈了所有我嘗試過的選項,我如何在「dd-MMM-yy」類似16-Mar-05format中獲得我的localDate?

謝謝!

public class DateAdapter extends XmlAdapter<String, LocalDate> { 

// the desired format 
private String pattern = "dd-MMM-yy"; 

@Override 
public String marshal(LocalDate date) throws Exception { 
    //return new SimpleDateFormat(pattern).format(date); 
    return date.toString("dd-MMM-yy"); 
} 

@Override 
public LocalDate unmarshal(String date) throws Exception { 
    if (date == null) { 
     return null; 
    } else { 
     //first way 
     final DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy"); 
     final LocalDate localDate2 = dtf.parseLocalDate(date); 

     //second way 
     LocalDate localDate3 = LocalDate.parse(date,DateTimeFormat.forPattern("dd-MMM-yy")); 

     //third way 
     DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy"); 
     DateTime dateTime = FORMATTER.parseDateTime(date); 
     LocalDate localDate4 = dateTime.toLocalDate(); 
     return localDate4; 
    } 
} 
+0

我跑你的代碼,我沒有看到問題 – MadProgrammer

回答

4

所以我把你的代碼並運行它,它工作正常,我...

的問題,我想,你遇到的是你期待一個LocalDate對象保持格式,你原來解析對象,這不是如何LocalDate工作。

LocalDate是日期或時間段的表示,它不是格式。

LocalDate有一個toString方法,它可以用來轉儲對象的值,它是這個對象用來提供人類可讀表示的內部格式。

要格式化的日期,你需要使用某種格式化器中,將帶你想要的圖案和日期值,並返回一個String

例如,下面的代碼...

SimpleDateFormat sdf = new SimpleDateFormat(pattern); 
String date = "16-Mar-05"; 

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy"); 
LocalDate localDate2 = dtf.parseLocalDate(date); 
System.out.println(localDate2 + "/" + dtf.print(localDate2)); 

//second way 
LocalDate localDate3 = LocalDate.parse(date, DateTimeFormat.forPattern("dd-MMM-yy")); 
System.out.println(localDate3 + "/" + dtf.print(localDate3)); 

//third way 
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy"); 
DateTime dateTime = FORMATTER.parseDateTime(date); 
LocalDate localDate4 = dateTime.toLocalDate(); 
System.out.println(localDate4 + "/" + FORMATTER.print(localDate4)); 

生產...

2005-03-16/16-Mar-05 
2005-03-16/16-Mar-05 
2005-03-16/16-Mar-05 

生氣這個之前你,這就是Java Date是如何工作的,以及。

+0

感謝您的回覆!是的,多數民衆贊成它我不想這個:2005-03-16我想要這個:16三月05。但沒有打印,我需要將它保存在一個變量,所以我可以返回它。我怎樣才能做到這一點? – user149855

+1

使用其中一個格式化程序(如代碼中所示)來處理所需的字符串表示日期。如果數據庫需要一個Date對象,那麼您就不用擔心了,因爲數據庫將以所需的格式存儲日期的表示形式,並會返回一個日期對象,然後您可以根據需要對其進行格式化。 – MadProgrammer