문자열에 저장된 날짜로부터 패턴을 프로그래밍 방식으로 어떻게 생성합니까?
문제
날짜 표현이 포함된 문자열이 있습니다.그것은 다음과 같습니다:
2006년 11월 30일 목요일 19:00:00 EST
SimpleDateFormat을 사용하여 Date 개체를 만들려고 하는데 두 가지 문제가 있습니다.
1.) SimpleDateFormat 생성자에 솔루션을 하드 코딩하는 패턴을 알 수 없습니다.
2.) 날짜 출력의 다양한 패턴에 이를 재사용할 수 있도록 패턴을 결정하기 위해 API를 사용하여 문자열을 구문 분석할 수 있는 방법을 찾을 수 없습니다.
API를 사용하는 솔루션이나 맞춤형 솔루션을 아시는 분이 계시다면 정말 감사하겠습니다.
해결책
SimpleDateFormat에 전달할 형식은 다음에서 찾아볼 수 있습니다. http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html
new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy")
두 번째 질문에 관해서는 날짜 형식을 파악하고 형식이 무엇인지 미리 알지 못한 채 구문 분석하는 Java 라이브러리를 모릅니다.
다른 팁
POJava 날짜 파서 org.pojava.datetime.DateTime은 여러 언어, 시간대 및 형식을 지원하는 불변의 강력한 파서입니다.
무엇보다도, 파서는 경험적이며 작동하기 위해 기존의 "형식"이 필요하지 않습니다.날짜/날짜-시간 텍스트 문자열을 전달하고 java.util.Date를 가져옵니다!
날짜를 구문 분석하고 패턴을 계산하는 쉬운 방법이 있는지 잘 모르겠지만 게시한 패턴은 다음과 같을 것이라고 생각했습니다.
EEE MMM dd HH:mm:ss zzz yyyy
날짜를 구문 분석하거나 형식을 지정하는 것 이외의 작업을 수행하려는 경우 패턴 자체를 처리할 수 있는 방법이 많지 않습니다.얼마 전에 나는 서식이 지정된 텍스트 필드에 날짜를 입력하기 위한 Swing 구성 요소를 작성하고 있었습니다.패턴을 제공하면 해당 패턴의 요소를 통해 텍스트 입력 커서가 이동하여 유효한 값만 허용됩니다.
그 일환으로 나는 DateFormatParser를 작성했습니다. OpenHarmonise 오픈 소스 프로젝트의 일부로 여기에서 사용 가능.
날짜를 패턴으로 분석하는 것은 해결해야 할 매우 흥미로운 문제입니다.특정 가정을 해야 합니다(예:사용 :날짜가 아닌 시간) 하지만 2자리 연도와 일/월 또는 월/일 배열의 영원한 문제에 직면하게 됩니다.
귀하가 제공한 날짜 형식은 임의적인 형식이 아니라는 점을 아는 것이 좋습니다.이는 내장 Date.toString() 메소드의 출력입니다(적어도 영국 및 미국 로케일에서는).우연은 아니지만 이는 유닉스 'date' 명령의 형식이기도 합니다(적어도 Linux에서는, 다른 구현도 믿습니다). 현명하기는 하지만 Date.toString()은 한 자리의 일 숫자를 0으로 채웁니다. 유닉스 날짜는 그렇지 않습니다.
이것이 의미하는 바는 형식화되지 않은 날짜를 사용자 수정 가능 필드(예:HTML INPUT 필드) 수정되지 않은 상태로 다시 수신됩니다.따라서 입력이 이 형식으로 제공된다고 해서 사용자가 수천 개의 다른 임의 형식을 입력한다는 의미는 아닙니다.
물론 여전히 그럴 수도 있다.일반적으로 날짜 입력을 처리하는 방법은 여러 개의 try/catch 블록을 사용하여 한 형식, 다른 형식, 또 다른 형식에 대해 시도하는 것입니다.우리의 표준 프레임워크는 이제 기본적으로 최대 약 20가지의 다양한 형식으로 구성됩니다.물론 아직 완벽하지는 않습니다.일전에 날짜(비표준 월 약어, 연도 없음)로 "03 Sept"를 입력하는 사람을 발견했는데 우리는 해당 시나리오를 처리하지 않았습니다.
Apache Commons 참조 날짜 유틸리티.거기에 parseDate
당신의 String
그리고 여러 패턴을 시도하고 뱉어냅니다. Date
사례.
다른 사람들이 말했듯이 패턴은 그래야 할 것 같습니다.
new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"
임의 형식의 날짜를 구문 분석하는 경우 Java에서 이 작업을 수행하는 라이브러리를 알지 못합니다.그런 것을 개발하고 싶다면 Perl을 살펴보는 것부터 시작하겠습니다. str2time 기능.
나는 다른 질문이 매우 흥미롭다고 생각합니다.하지만 한 가지 심각한 문제가 있습니다. 다음을 분석해 보세요.08/07/06!예상되는 형식의 하위 집합으로 자신을 제한하는 경우 정규식을 가지고 놀면서 문제를 해결할 수 있고, 예상되는 패턴을 많이 구축한 다음 공백 등에서 문자열을 나누고 부분적으로 일치시킬 수 있습니다.
해당 날짜의 패턴을 묻는 것인가요?그렇다면 이렇게 해야 한다고 생각합니다.
"EEE MMM d HH:mm:ss z yyyy"
아니면 형식이 지정된 날짜를 가져와서 형식을 추론하고 구문 분석하려고 하시나요?
어떻습니까:
EEE MMM dd HH:mm:ss zzz yyyy
SimpleDateFormat의 생성자에 문자열을 전달하기만 하면 됩니다.객체를 사용하려면 날짜로 변환하려는 문자열을 전달하는 구문 분석 메서드를 호출하면 됩니다.
다음을 살펴볼 수 있습니다.
http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
이것은 실제로 동일하지는 않지만 다음과 같은 것을 보고 싶을 수도 있습니다. J만성, 날짜에 대한 자연어 처리를 수행할 수 있습니다.따라서 입력 날짜는 "내일" 또는 "다음 화요일부터 2주"와 같은 것일 수 있습니다.
이는 귀하의 지원서에 전혀 도움이 되지 않을 수도 있지만, 다시 도움이 될 수도 있습니다.