TreeSetを使用します。デフォルトコンストラクタを使用してTreeSetを作成すると、要素を自然に順序付けるセットが返されます。 DateはComparableの実装者なので、余分な作業は必要ありません。
次に、あなたの現在の時刻でTreeSetの上位メソッドを呼び出して、最初のキーがあなたの時間よりも厳密に大きくなるようにすることができます。だから、完全に
:
TreeSet<Date> dates = new TreeSet<Date>();
//add all dates..
Date next = dates.higher(new Date())
EDIT私はあなたにも、年/月/日なしで解析された日付が0ミリ秒からスタートしますので、時間をオフセットする方法を尋ねることがあります実現。
あなたがそうのような何かを行うことができ、今日の日付と現在時刻を取得するには:
SimpleDateFormat format = new SimpleDateFormat("h:mm a");
Calendar date = Calendar.getInstance();
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, (int)format.parse(dateFromFile).getTime());
date.getTime()
あり、より良いアプローチであるが、てSimpleDateFormatを使用すると、通常の日付を解析するための良い第一歩であるかもしれません。
SECOND EDITここで私が示唆しているものとは多少の混乱が生じるかもしれないと思います。
SimpleDateFormat format = new SimpleDateFormat("h:mm a");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar date = Calendar.getInstance();
date.setTimeZone(TimeZone.getTimeZone(myTimeZone));
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
TreeSet<Long> timesFromFile = new TreeSet<>();
TreeSet<Date> datesFromFile = new TreeSet<>();
String line;
//i'm using class BufferedReader since it reads lines at a time
while ((line = bufferedFileReader.readLine()) != null) {
date.set(Calendar.MILLISECOND, (int)format.parse(line).getTime());
Date dateFromFile = date.getTime();
long millsecondRepresentation = dateFromFile.getTime();
datesFromFile.add(dateFromFile);
timesFromFile.add(millsecondRepresentation);
}
Date now = new Date();
Long higherLong = timesFromFile.higher(now.getTime());
Date higherDate = datesFromFile.higher(now);
assertEquals(new Date(higherLong), higherDate);
assertTrue(now.before(higherDate));
assertTrue(now.getTime() < higherLong);
彼らはそれのタイムスタンプに今日の日付を考慮されます現在の時刻と比較することができるようにこれは事実上、今日の日付でこれらの回を作成します。私は、日付の中で何らかの方法で因数分解することなく、時間の比較を行っている標準的なJavaメソッドを知らない。
TreeSet documentation
SimpleDateFormat documentation
ファイルの時刻はいつも注文していますか? –