2017-04-30 6 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 

を。私は以下のようにしています:

これは私に上記のタイムスタンプのリストから開始と終了の範囲を与えます。これは正しい方法ですか、それとも良い方法がありますか?

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

すべてのタイムスタンプは、同じタイムゾーンではありません。アルファベット順にソートすると、時間順にソートされません。インスタンスを解析し、インスタンスをソートします(または、最小値と最大値を見つけてください:Collectionsクラスにもその方法があります)。 –

+0

OffsetDateTimeは、これらの文字列に使用する正しいクラスです。 'OffsetDateTime'は比較可能で、主にタイムライン上のポイント、すなわちインスタント(そして第2にゾーンオフセット)によって注文するので、明示的に「インスタント」に変換する必要はありません。 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

これは実行可能です。このクラスはすでにあなたのために書かれています。:-) –

関連する問題