Java 如何从时间戳列表中获取开始和结束范围?

Java 如何从时间戳列表中获取开始和结束范围?,java,sorting,date,jodatime,Java,Sorting,Date,Jodatime,我有一个时间戳字符串,如下所示: 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-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);
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
更新

所以我应该做如下的事情:

List<String> timestamp = new ArrayList<>();
// adding above string timestamp into this list
// now sort it
Collections.sort(timestamp);
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
List timestamp=new ArrayList();
timestamp.add(OffsetDateTime.parse(“2016-01-15T00:44:59+08:30”);
//添加其他类似上面的时间戳字符串,然后对其进行排序
Collections.sort(时间戳);
timestamp.get(0);//起始范围
timestamp.get(timestamp.size()-1);//终点范围

必须使用比较器。 首先,创建一个类并实现
Comparator
。然后将值1和值2与您的选择进行比较。之后,使用此类对集合进行排序

尊敬的a.ayati

OffsetDateTime
将这些字符串解析为
java.time.OffsetDateTime
对象

OffsetDateTime.parse( "2016-01-15T00:44:59+08:30" )
将这些日期时间对象添加到
集合中
并排序。您可能需要一个
列表
,例如
数组列表
排序集

time类实现了
compareTo
方法,以作为一个整体来履行它们的契约。所以这些对象知道如何排序

像这样:

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 );
List odts=new ArrayList();
OffsetDateTime odt=OffsetDateTime.parse(“2016-01-15T00:44:59+08:30”);
添加(odt);
…//解析剩余的ISO 8601字符串,将每个新的OffsetDateTime对象添加到集合中。
集合。排序(odts);

所有时间戳不在同一时区。按字母顺序排序不会按时间顺序排序。将它们解析为实例,并对实例进行排序(或者只查找最小值和最大值:Collections类也有这样做的方法)。
OffsetDateTime
是用于这些字符串的正确类。无需显式转换为
Instant
,因为
OffsetDateTime
是可比较的,并且主要按时间线上的点排序,即即时(其次按区域偏移)。见巴兹尔·波克的回答@JBNizet(我当然同意按字符串排序不会给出正确的顺序)如果您只需要排序顺序中的第一个和最后一个,则可以使用
Collections.min()
Collections.max()
,而不是
Collections.sort()
。如果有很多时间戳,这也会更有效。这个技巧也适用于目前为止发布的答案。如果这些时间戳来自,为什么不保留您在那里拥有的
ZonedDateTime
对象而不是字符串?然后排序,或者只是找到第一个和最后一个,将是一个不需要动脑筋的事。不需要实现自己的。将ISO 8601字符串解析为java.time对象,这些对象已经知道如何排序。。更新了我的问题的细节。。这就是我现在应该做的?我应该说是的。如果您遇到任何问题,请回复,我相信我们中的一些人希望再看一看。