날짜를 구문 분석하는 방법? [복제하다
-
14-09-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
- Java String까지 현재까지 변환 13 답변
이 날짜를 구문 분석하려고합니다 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);
}