질문 : 자바 문자열을 날짜로 변환
'2010 년 1 월 2 일'형식 String
을 Java Date
로 변환하는 가장 좋은 방법은 무엇입니까?
궁극적으로 월, 일, 연도를 정수로 나누고 싶습니다.
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();
날짜를 시간으로 변환합니다.
답변
그것은 어려운 방법이며, 이러한 java.util.Date
setter 메서드는 Java 1.1 (1997) 이후로 더 이상 사용되지 않습니다.입력 문자열과 일치하는 형식 패턴을 사용 SimpleDateFormat
사용하여 날짜 형식을 지정하면됩니다 .
입력 문자열로 "2010 년 1 월 2 일"의 특정 경우 :
String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010
Locale
인수의 중요성에 유의하십시오. 생략하면 입력 문자열의 월 이름에 사용되는 것과 같이 반드시 영어가 아닌 기본 로케일을 사용합니다. 로케일이 입력 문자열과 일치하지 않으면 형식 패턴이 유효 해 보이지만 java.text.ParseException
다음은 사용 가능한 모든 형식 패턴을 나열하는 javadoc 에서 관련성을 추출한 것입니다.
패턴은 대소 문자를 구분하며 4 자 이상의 텍스트 기반 패턴은 전체 형식을 나타냅니다. 그렇지 않으면 사용 가능한 경우 짧거나 축약 된 양식이 사용됩니다. 따라서 예를 들어 MMMMM
이상은 필요하지 않습니다.
다음은 주어진 문자열을 현재까지 구문 분석하는 SimpleDateFormat
패턴의 몇 가지 예입니다.
중요한 점은 SimpleDateFormat
이 스레드로부터 안전 하지 않다는 것입니다. 즉, 정적 또는 인스턴스 변수로 선언하고 할당 한 다음 다른 메서드 / 스레드에서 재사용해서는 안됩니다. 항상 메서드 로컬 범위 내에서 완전히 새로 만들어야합니다.
Java 8 이상을 사용하는 경우 DateTimeFormatter
를 사용하십시오 (여기에서도 사전 정의 된 모든 포맷터 및 사용 가능한 형식 패턴을 보려면 링크를 클릭하십시오. 튜토리얼은 여기에서 볼 수 있음 ). 이 새로운 API는 JodaTime에서 영감을 받았습니다.
String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02
참고 : 형식 패턴에 시간 부분도 포함되는 경우 LocalDateTime#parse(text, formatter)
대신 LocalDate#parse(text, formatter)
. 또한 형식 패턴에 시간대도 포함되는 경우 ZonedDateTime#parse(text, formatter)
대신 사용하십시오.
다음은 사용 가능한 모든 형식 패턴을 나열 하는 javadoc 에서 관련성을 추출한 것입니다.
더 많이 사용되는 패턴에 대해 미리 정의 된 여러 포맷터가 있습니다. 따라서 예를 들어 DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
DateTimeFormatter.RFC_1123_DATE_TIME
사용할 수 있습니다. SimpleDateFormat
과 달리 스레드로부터 안전하기 때문에 가능합니다. 따라서 필요한 경우 직접 정의 할 수도 있습니다.
특정 입력 문자열 형식의 경우 명시적인 DateTimeFormatter
를 사용할 필요가 없습니다. 2016-09-26T17 : 44 : 57Z와 같은 표준 ISO 8601 날짜는 이미 사용하고 LocalDateTime#parse(text)
ISO_LOCAL_DATE_TIME
포맷터. 마찬가지로 LocalDate#parse(text)
는 시간 구성 요소없이 ISO 날짜를 구문 분석하고 ( ISO_LOCAL_DATE
참조) ZonedDateTime#parse(text)
는 오프셋 및 시간대가 추가 된 ISO 날짜를 구문 분석합니다 ( ISO_ZONED_DATE_TIME
참조).
출처 : https://stackoverflow.com/questions/4216745/java-string-to-date-conversion
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java를 사용하여 문자열을 텍스트 파일에 저장 (0) | 2021.12.05 |
---|---|
JavaScript를 사용하여 페이지 맨 위로 스크롤 하는 방법 (0) | 2021.12.04 |
Java에서 파일의 MD5 체크섬 가져 오기 (0) | 2021.12.03 |
자바 : List<String> 문자열로 변환 (0) | 2021.11.30 |
Java에서 디렉토리를 만드는 방법 (0) | 2021.11.29 |