2013-07-09 3 views
1

JAXB 및 joda 시간 2.2를 사용 중입니다. Mysql에서 XML로 데이터를 백업하고 다시 복원 할 수 있습니다. 내 테이블에는 "16-Mar-05"형식의 날짜 특성이 있습니다. 나는 이것을 XML에 성공적으로 저장한다. 하지만 XML에서 그것을 읽고 MySQL의 테이블에 다시 넣고 싶을 때 나는 올바른 포맷을 얻을 수 없다.String to joda "dd-MMM-yy"형식의 LocalDate

이것은 내 XMLAdapter 클래스입니다. 여기서는 비 정렬 방법에서 입력 문자열이 "16-Mar-05"이지만 패턴을 설정하고 있지만 localDate 변수를 "16-Mar-05"형식으로 가져올 수 없습니다. "dd-MMM-yy"로 변경하십시오. 내가 시도한 모든 옵션을 올렸는데 16-Mar-05format과 같이 "dd-MMM-yy"에서 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 

당신이 이것에 대해 흥분하기 전에,이 자바뿐만 아니라 작동 Date 방법이다.

+0

답장을 보내 주셔서 감사합니다. 예, 원하지 않는 내용 : 2005-03-16 원하는 항목 : 16-3 월 05. 하지만 인쇄되지 않은 나는 그것을 반환 할 수 있도록 변수에 저장해야합니다. 어떻게해야합니까? – user149855

+1

코드에서 설명한대로 형식 작성기 중 하나를 사용하여 필요한 날짜에서 문자열 표현으로 변환하십시오. 데이터베이스가 Date 객체를 기대한다면 걱정하지 않아도됩니다. 데이터베이스는 날짜 형식을 필요한 형식으로 저장하고 필요에 따라 형식을 지정할 수있는 날짜 객체를 반환합니다. – MadProgrammer