문자열에 저장된 날짜로부터 패턴을 프로그래밍 방식으로 어떻게 생성합니까?

StackOverflow https://stackoverflow.com/questions/43842

  •  09-06-2019
  •  | 
  •  

문제

날짜 표현이 포함된 문자열이 있습니다.그것은 다음과 같습니다:

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주"와 같은 것일 수 있습니다.

이는 귀하의 지원서에 전혀 도움이 되지 않을 수도 있지만, 다시 도움이 될 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top