programing

날짜를 해석하는 방법?

prostudy 2022. 7. 18. 22:07
반응형

날짜를 해석하는 방법?

이 날짜를 해석하려고 합니다.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"나는 긍정적인 답을 가지고 있다.문제가 뭐죠?이 형식을 해석하려면 어떻게 해야 하나요?

추신. 저는 이 날짜를jDatePicker사용자가 날짜를 선택할 때 표시되는 날짜 형식을 변경하는 방법에 대한 지침은 없습니다.

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

"Thu Jun 18 20:56:02 EDT 2009" 날짜 문자열을 해석하려면 다음과 같은 SimpleDateFormat(대략)이 필요합니다.

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

두 형식이 일치하지 않습니다.해석하려는 문자열의 레이아웃과 일치하는를 날짜로 구성해야 합니다.보기 쉽게 일렬로 정렬하면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에서 정의Joda-Time에서 영감을 받아 ThreeTen-Extra 프로젝트에서 확장되었습니다.번거로운 오래된 클래스인 java.util에 비해 크게 개선되었습니다.날짜/. 캘린더 등

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[미국/뉴욕]

시간대 조정

재미삼아 인도 시간대에 맞추자.

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

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

j.u로 변환합니다.날짜.

java.util이 정말 필요한 경우.클래스에서 사용할 날짜 개체는 아직 java.time 유형으로 업데이트되지 않았습니다. 변환하십시오.할당된 시간대가 손실되지만 UTC로 자동으로 조정되는 동일한 시간이 있음을 유의하십시오.

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

Get Selected Date는 어떻습니까?어쨌든, 특히 코드 질문에 대해서는, 다음의 행에 문제가 있습니다.

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

생성자에 들어가는 문자열은 날짜 형식과 일치해야 합니다.그 방법에 대한 설명서는 여기에 있습니다."EEE MM d HH:mm:ss zzz yyy"에 가까운 것이 필요한 것 같습니다.

"2016년 9월 13일 화요일 00:00:00 GMT-0500(Hora de verano central(México))을 자바에서 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);
}

언급URL : https://stackoverflow.com/questions/999172/how-to-parse-a-date

반응형