문제

이 질문은 이미 여기에 답이 있습니다.

이 날짜를 구문 분석하려고합니다 SimpleDateFormat 그리고 그것은 작동하지 않습니다.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}

이 코드를 strdate =로 시도하면"2008-10-14", 나는 긍정적 인 대답이 있습니다. 뭐가 문제 야? 이 형식을 어떻게 구문 분석 할 수 있습니까?

추신. 나는이 날짜를 a에서 얻었다 jDatePicker 그리고 사용자가 날짜를 선택할 때 얻는 날짜 형식을 어떻게 수정하는지에 대한 지침은 없습니다.

도움이 되었습니까?

해결책

다른 형식으로 설정된 SimpledateFormat로 날짜를 구문 분석 할 수 없습니다.

"Thu 6 월 18 일 20:56:02 EDT 2009"날짜 문자열을 구문 분석하려면 이와 같은 단순한 형태가 필요합니다 (대략).

SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");

이것을 사용하여 문자열을 날짜로 구문 분석 한 다음 다른 SimpledateFormat를 사용하여 해당 날짜를 원하는 형식으로 바꿉니다.

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...

Javadoc : http://docs.oracle.com/javase/7/docs/api/java/text/simpledateformat.html

다른 팁

문제는 다음과 같이 날짜가 형식화된다는 것입니다.

Thu Jun 18 20:56:02 EDT 2009

그러나 사용 중입니다 SimpleDateFormat 그건:

yyyy-MM-dd

두 형식은 동의하지 않습니다. a SimpleDateFormat 그것은 당신이 날짜로 구문 분석하려는 문자열의 레이아웃과 일치합니다. 쉽게 볼 수 있도록 물건을 감싸고 있습니다. SimpleDateFormat 이와 같이:

EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

링크 된 Javadoc 페이지를 확인하고 문자가 어떻게 사용되는지 확인하십시오.

우리는 이제이 작업을 수행하는보다 현대적인 방법을 가지고 있습니다.

Java.Time

그만큼 Java.Time 프레임 워크는 Java 8 이상으로 번들로 제공됩니다. 보다 지도 시간. 이 새로운 수업은 영감을 받았습니다 조다-시간, 정의 JSR 310, 그리고 Threeten-extra 프로젝트. 그들은 귀찮은 구식 수업, java.util.date/.calendar et al.

3-4 글자 코드는 다음과 같습니다 EDT 표준화되거나 독특하지 않습니다. 가능할 때마다 피하십시오. 사용하는 법을 배우십시오 ISO 8601 대신 표준 형식. Java.Time 프레임 워크는 번역시 찌르기를 할 수 있지만 일반적으로 사용되는 코드 중 다수는 중복 값을 가지고 있습니다.

그건 그렇고, 기본적으로 Java.Time이 ISO 8601 형식을 사용하여 문자열을 생성하지만 괄호 안의 시간대 이름을 추가하여 확장하는 방법에 유의하십시오.

String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );

콘솔에 덤프.

System.out.println ( "zdt : " + zdt );

실행할 때.

ZDT : 2009-06-18T20 : 56 : 02-04 : 00 [America/New_York

시간대를 조정하십시오

재미를 위해 인도 시간대에 적응합시다.

ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );

ZDTKOLKATA : 2009-06-19T06 : 26 : 02+05 : 30 [아시아/콜카타

사법권으로 개종하십시오

java.time 유형에 아직 업데이트되지 않은 클래스와 함께 사용하기 위해 java.util.date 객체가 실제로 필요한 경우 변환하십시오. 할당 된 시간대를 잃고 있지만 동일한 모멘트가 자동으로 조정됩니다. UTC.

java.util.Date date = java.util.Date.from( zdt.toInstant() );

어때 getSelectedDate? 어쨌든, 특히 코드 질문에 문제는이 줄에 문제가 있습니다.

new SimpleDateFormat("yyyy-MM-dd");

생성자에 들어가는 문자열은 날짜의 형식과 일치해야합니다. 그렇게하는 방법에 대한 문서는입니다 여기. "eee mmm d hh : mm : ss zzz yyyy"에 가까운 것이 필요한 것 같습니다.

응답으로 : "TUE TUE를 전환하는 방법 2016 년 9 월 13 일 00:00:00 GMT-0500 (Hora de Verano Central (México))) Java의 DD-MM-YY로 변환하는 방법은 무엇입니까?", 그것은 얼마나 중복되는지 표시되었습니다

이것을 시도하십시오 : java.util.Date, java.text.SimpleDateFormat, 그것은 간단한 솔루션입니다.

public static void main(String[] args) throws ParseException {

    String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))";
    Date f = new Date(fecha);

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("-5GMT"));
    fecha = sdf.format(f);
    System.out.println(fecha);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top