2014-11-21 3 views
2

아래 코드는 날짜 형식을 "yyyy-MM-dd'T'HH:mm:ss"에서 "MM/dd/yyyy"으로 변환합니다.Joda 시간을 사용하여 날짜 형식을 변환 할 때 여러 날짜 형식을 제공합니다.

import org.joda.time.DateTime; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 

public class TestDate { 

    public static void main(String[] args) { 

     DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"); 
     DateTime dateTime = parser.parseDateTime("2014-05-19T23:59:59"); 
     DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy"); 
     System.out.println(formatter.print(dateTime)+"\n"); 

     dateTime = parser.parseDateTime("2014-06-09T03:00:23.67"); 
     formatter = DateTimeFormat.forPattern("MM/dd/yyyy"); 
     System.out.println(formatter.print(dateTime)); 

    } 

예외가 "2014-06-09T03:00:23.67" 위해 발생합니다 :

2014-05-27T03:00:32.613 

나는 단지의 "MM/dd/yyyy" 부분이 필요합니다

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2014-06-09T03:00:23.67" is malformed at ".67" 
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899) 
    at TestDate.main(TestDate.java:16) 

가 나는 또한 같은 다른 가능성을 수용 할 수 있어야합니다 날짜 이후에는 그 이후의 모든 것을 무시할 수 있습니다. Using Joda Date & Time API to parse multiple formats

또는 특정 패턴 이후의 모든 것을 무시하는 와일드 카드를 사용할 수 있습니까? 뭔가 같은 :

DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd%"); 

또는이 부정 보이지만 난, 그냥 'T'전에 나타나는 값을 사용하여 날짜 시간의 'T'섹션에서 문자열 및 분할을 구문 분석 할 수 있습니다 ....

다른 방법이 있습니까?

업데이트 : 시간, 사용하는 대신 필요하지 않기 때문에

는 :

String strDate = "2014-05-19T23:59:59"; 
DateTime dateTime = parser.parseDateTime(strDate); 

사용됩니다 단지 문자열의 2014-05-19 부분을 구문 분석

String strDate = "2014-05-19T23:59:59"; 
DateTime dateTime = parser.parseDateTime(strDate.substring(0, 10)); 

,이 음식을 장만한다 여러 시간 형식.

+0

당신은 Joda [ISODateTimeFormat] (http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html)을 체크 아웃 적이 있습니까? – OldCurmudgeon

+0

@OldCurmudgeon ISODateTimeFormat은 여러 날짜 형식을 허용하지 않거나 여러 형식을 기반으로 날짜 형식을 지정할 수 있습니까? –

+2

가능한 중복 ... http://stackoverflow.com/questions/4153602/how-to-force-joda-time-to-parse-only-part-of-string – jalopaba

답변

0

당신은 다음 방법으로 날짜 - 시간 (형식 yyyy-MM-dd%) 문자열에서 날짜을 추출 할 수 있습니다 :

사용

1) 정규 표현식

Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}"); 
    Matcher matcher = pattern.matcher(dateTime); 
    if (matcher.find()) 
    { 
    System.out.println(matcher.group()); 
    } 
를 사용 String::split

String dateTime = "2014-05-19T23:59:59"; 
    String date = dateTime.split("T")[0]; 

2)

또한 형식을 변경할 수 있습니다 t 정규 표현식과 MM/dd/yyyy O를 :

String dateTime = "2014-05-19T23:59:59"; 
    // pattern for 'yyyy-MM-dd%' 
    Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2}).+"); 
    Matcher matcher = pattern.matcher(dateTime); 
    if (matcher.matches()) 
    { 
    // date in format 'MM/dd/yyyy' 
    String dateInNewFormat = String.format("%s/%s/%s", 
     matcher.group(2), matcher.group(3), matcher.group(1)); 
    } 
관련 문제