나는 소인 문자열과 같이 있습니다타임 스탬프 목록에서 시작 및 끝 범위를 얻는 방법?
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
모든 타임 스탬프는 같은 시간대에 있지 않습니다. 알파벳순으로 정렬하면 시간순으로 정렬되지 않습니다. 인스턴스로 파싱하고 Instants를 정렬합니다 (또는 최소값과 최대 값을 찾습니다. Collections 클래스에도 해당 메소드가 있습니다). –
'OffsetDateTime'은 해당 문자열에 사용할 올바른 클래스입니다. 'OffsetDateTime'은 비교 가능하고 주로 타임 라인상의 포인트, 즉 인스턴트 (그리고 두 번째로 존 오프셋에 의해)로 주문하기 때문에 명시 적으로 인스턴트로 변환 할 필요가 없습니다. Basil Bourque의 대답을보십시오. @JBNizet (물론 나는 문자열 정렬이 올바른 순서를 제공하지 않음에 동의 함) –
정렬 된 순서로 처음과 마지막 만 필요하면'Collections.min()'과'Collections.max ()'보다는'Collections.sort()'를 사용하십시오. 많은 타임 스탬프가있는 경우이 방법이 더 효율적입니다. 이 트릭은 지금까지 게시 된 답변에서도 작동합니다. –