2017-04-30 1 views
1

나는 소인 문자열과 같이 있습니다타임 스탬프 목록에서 시작 및 끝 범위를 얻는 방법?

2016-01-14T22:43:55Z 
2016-01-15T00:04:50Z 
2016-01-15T00:44:59+08:30 
2016-01-15T01:25:35-05:00 
2016-01-15T01:44:31+08:30 
2016-01-15T02:22:45-05:00 
2016-01-15T02:54:18-05:00 
2016-01-15T03:53:26-05:00 
2016-01-15T04:32:24-08:00 
2016-01-15T06:31:32Z 
2016-01-15T07:06:07-05:00 

은 내가 범위를 시작하고 타임 스탬프 위에서 범위를 종료하는 것을 얻을 수 있도록으로 정렬하고 싶습니다. 나는 아래와 같이하고있다 :

List<String> timestamp = new ArrayList<>(); 
// adding above string timestamp into this list 
// now sort it 
Collections.sort(timestamp); 

이것은 위의 타임 스탬프 목록에서 시작 및 끝 범위를 제공한다. 이것이 올바른 방법일까요? 더 좋은 방법이 있습니까?

timestamp.get(0); // start range 
timestamp.get(timestamp.size() - 1); // end range 

업데이트

그래서 나는 다음과 같은 것을 수행해야합니다 당신은 비교기를 사용해야합니다

List<OffsetDateTime> timestamp = new ArrayList<>(); 
timestamp.add(OffsetDateTime.parse("2016-01-15T00:44:59+08:30")); 
// add other timestamp string like above and then sort it 
Collections.sort(timestamp); 

timestamp.get(0); // start range 
timestamp.get(timestamp.size() - 1); // end range 
+1

모든 타임 스탬프는 같은 시간대에 있지 않습니다. 알파벳순으로 정렬하면 시간순으로 정렬되지 않습니다. 인스턴스로 파싱하고 Instants를 정렬합니다 (또는 최소값과 최대 값을 찾습니다. Collections 클래스에도 해당 메소드가 있습니다). –

+0

'OffsetDateTime'은 해당 문자열에 사용할 올바른 클래스입니다. 'OffsetDateTime'은 비교 가능하고 주로 타임 라인상의 포인트, 즉 인스턴트 (그리고 두 번째로 존 오프셋에 의해)로 주문하기 때문에 명시 적으로 인스턴트로 변환 할 필요가 없습니다. Basil Bourque의 대답을보십시오. @JBNizet (물론 나는 문자열 정렬이 올바른 순서를 제공하지 않음에 동의 함) –

+0

정렬 된 순서로 처음과 마지막 만 필요하면'Collections.min()'과'Collections.max ()'보다는'Collections.sort()'를 사용하십시오. 많은 타임 스탬프가있는 경우이 방법이 더 효율적입니다. 이 트릭은 지금까지 게시 된 답변에서도 작동합니다. –

답변

3

OffsetDateTime

a.ayati

안부 java.time.OffsetDateTime 객체로 그 ISO 8601 문자열을 분석.

OffsetDateTime.parse("2016-01-15T00:44:59+08:30") 

해당 날짜 시간 개체를 Collection에 추가하고 정렬하십시오. ArrayList 또는 SortedSet과 같은 List이 필요합니다.

java.time 클래스는 Comparable과 같은 계약을 이행하기 위해 메소드를 구현합니다. 그래서이 객체들은 어떻게 정렬 하는지를 알고 있습니다. 이처럼

:

List<OffsetDateTime> odts = new ArrayList<>(); 

OffsetDateTime odt = OffsetDateTime.parse("2016-01-15T00:44:59+08:30") ; 
odts.add(odt); 
… // Parse remaining ISO 8601 strings, adding each new OffsetDateTime object to collection. 

Collections.sort(odts); 
+0

지금 얻었습니다 .. 세부 사항으로 내 질문을 업데이트했습니다. 이것이 내가 지금해야하는 방법입니까? – user1950349

+0

나는 그것이 말해야한다. 문제가 발생하면 되돌리십시오. 다시 한 번 생각해보고 싶은 부부가있을 것입니다. –

0

. 먼저 클래스를 만들고 Comparator을 구현하십시오. 그리고 value1과 value2를 선택한 것과 비교하십시오. 그 후에이 클래스를 Collections.sort에 사용하십시오.

+1

자신 만의 ['Comparator'] (https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html)를 구현할 필요가 없습니다. 정렬 방법을 이미 알고있는 java.time 객체로 ISO 8601 문자열을 파싱합니다. –

+0

실용 가능합니다. 수업은 이미 작성되었습니다.:-) –

관련 문제