2012-10-08 2 views
3

이 궁금 해서요 :Java에서 시간을 구문 분석하는 방법은 무엇입니까? 자바는이 같은 시간/날짜를 구문 분석하는 방식으로 내장되어있는 경우

5m1w5d3h10m15s 

그것의 5개월, 1 주 5 일 3 시간 10 분 15 초.

+0

TV를 보거나 축구를하면서 시간을 보낼 수 있습니까? 농담이야! 지금까지 어디에서 해결책을 찾았습니까? – CKing

+0

이런 종류의 입력 소스는 무엇입니까? – Vikdor

답변

9

예, SimpleDateFormat이라고하면 패턴을 정의하기 만하면됩니다. 가능한 일부 라이브러리 (많은 사람들이 표준과 혼란보다 더 Joda, 리디렉션이 있습니다 물론

DateFormat df = new SimpleDateFormat("M'm'W'w'F'd'H'h'm'm's's'yyyy"); 
System.out.println(df.parse("5m1w5d3h10m15s"+"2012")); 

: 당신은하지 않았다으로

는 (? voluntarly) 정확한 년, 나는 하나를 추가 자바 라이브러리)하지만 질문은 "자바가 시간/날짜를 구문 분석 할 수있는 방법을 기본으로 제공한다면"에 대한 대답은 명확한 예입니다.

+1

하지 마십시오. 그러면 날짜로 구문 분석되어 역사상 특정 ​​시간을 나타냅니다. 5 개월은 매우 다른 시간입니다. – johv

+0

질문은 "구문 분석 시간/날짜"에 관한 것입니다. 그러나 나는 이것이 OP의 나쁜 표현이 아니 었는지 확신하지 못합니다. 사실 실제 질문이 기간에 관한 것이라면, 제 대답은 도움이되지 않습니다. 그러나 그때 ... 만약 지속 기간에 관한 것이라면, 달이 가변적 인 지속 시간을 갖는 것처럼 많은 의의가있는 것은 아닙니다. –

+0

가변 기간을 갖는 달에 대한 흥미로운 점! 그것은 여전히 ​​시간이 될 수 있습니다. 단지 "고정"하지 않고 밀리 초로 변환 할 수는 없습니다. 예 : 2012-10-08 + 5m1w5d3h10m15s가 완벽합니다.또는 5m3w + 10m - 1m3w = 15m2w. – johv

2

아마도 이것을 기간으로 분석하고 싶을 것입니다. 입력 내용이 "2012y10m8d"와 같은 경우가 아니라면 Date에 입력하는 것이 아닙니다. 일정 기간을 java.util.Date로 표시하려고하면 많은 문제가 발생할 것으로 예상됩니다. 날 믿어. 나는 그 길을 전에 지켰다.

기간 대신 Joda 시간을 사용하는 것이 좋습니다. 자세한 내용은 다음 질문을 참조하십시오. How do I parse a string like "-8y5d" to a Period object in joda time

HumanTime 너무 재미 있습니다. ... 당신의 자신의 파서를 구축하기 너무 어렵지 않을 것이다,

0

내가 특정 형식에 대해 잘 모릅니다 ...하지만 난 당신이 this 또한

를 살펴 보시기 바랍니다

0

SimpleDateFormatter 클래스를 사용하면 문자열을 날짜로 변환하는 데 도움이됩니다. Joda 시간 PeriodFormatter를 사용하면 날짜 대신 기간을 변환/표현할 수 있습니다. 예 : 당신은 표현할 수있을 것입니다 : 15m1w5d3h10m15s 너무 좋아.

1

먼저 문자열을 뒤집습니다. 그런 다음 문자열을 6 자리 숫자, 즉 부분, 즉 월, 주, 일, 시간, 분, 초로 토큰 화합니다. 각 토큰을 배열에 저장하고 각 요소를 개별적으로 처리합니다. a [0] = 초, a [1] = 분, a [5] = 개월. 그것은 내가 당신을 위해 이것을하는 라이브러리를 기억할 수 없기 때문에 제가 생각하기에 가장 직관적 인 방법입니다. 물론 "파스 (parse)"가 의미하는 바를 지정하지 않았습니다.

관련 문제