2016-03-31 16 views
0

私は行ごとに読んでいるテキストファイルのリストを持っています。 例、私のテキストファイルはストリング(午前7:08、午前10時03分)をAndroid/Javaの現在のローカル時間で比較します。

7:23 AM 
7:38 AM 
7:53 AM 
8:08 AM 
8:23 AM 
8:38 AM 
8:53 AM 
9:08 AM 
9:23 AM 
9:38 AM 

などです。

私は時間をフェッチすることができますが、私はlocaltime(アンドロイドのシステム時間)とすべての項目を比較し、次回を提案する必要があります。

システムでの私のローカル時間が午前8時であれば、私は次の利用可能な時間に8:08を表示する必要が

私のテキストファイルも(12:00 PM後)PM形式で時間を持っています。

比較する最善の方法を提案してください。

+0

ファイルの時刻はいつも注文していますか? –

答えて

0

まず、テキストファイルからフェッチする時間を変換する必要があります。 午前7:38の例を見てみましょう。

Hour = 7 

Minute = 38 

AM_PM value = AM 

今、自分の価値観でカレンダーインスタンスを作成します - -

   Calendar cal = Calendar.getInstance(); 
       cal.set(Calendar.HOUR, hour); 
       cal.set(Calendar.MINUTE, minute); 
       cal.set(Calendar.AM_PM, Calendar.AM); // Calendar.PM for PM 
       long time = cal.getTimeInMillis(); 

そしてCjurrent時間を -

long currentTimeInMillis = Calendar.getInstance().getTimeInMillis(); 

今、あなたはtimecurrentTimeInMillisの道を比較することができます3つの部分に スプリット、それをロジックを追加してタスクを達成する必要があります。

+0

'SimpleDateFormat'を使って' Date'オブジェクトを解析することができます。あなたは何かを分割する必要はありません。 –

+0

@ cricket_007この場合、Dateオブジェクトはありません。これは文字列形式の時間だけを保存するテキストファイルです。 –

+0

'SimpleDateFormat'から' parse( "7:38 AM") 'に' Date'を返します。これは 'Calendar.setTime()'で使うことができます。文字列を解析するだけの場合は、 'Calendar'の値を個別に設定する必要はありません。 –

2

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

+0

しかし、私は2つの時間のインスタンスをどのように比較するのですか?私は時間と分を比較し、次の大きい方を提案する必要があります。私は日付を必要としない –

+0

TreeSetはあなたのために(より高い方法で)比較しているものです。この場合、私はDateオブジェクトを提案しました。なぜなら、TreeSetはそれらの順序を知っているからです(Comparableを実装しているため)。私の質問の2番目の部分は時間の比較をカバーしています。標準Javaを使用する場合は、Dateオブジェクトを使用することをお勧めします。上記のようなカレンダーで日付を作成すると、時刻と今日の日付を比較できます。 millisecondsの代わりにlongsを使用している場合でも、同じTreeSetテクニックを使用し、Date.getTime()。getTime()を使用してミリ秒をlongとして取得できます。 – heisbrandon

0

あなたはjava.util.Date.compareToメソッドを使用することができます。

例:この進歩はのための3つの値-1 0 1を返します

 Date date = new Date(98, 5, 21); 
    Date date2 = new Date(99, 1, 9); 

    // make 3 comparisons with them 
    int comparison = date.compareTo(date2); 

より大きい場合は0を0に、-1を他のオプションに返します。このメソッドをプログラムに使用することができます。

私はıが助けてくれることを願っています。

+0

しかし、日付は時間とどう関係していますか?私は時間と分とAM/PMを比較するために探しています。カレンダーの日付ではありません –

関連する問題