2017-04-07 18 views
2

特定の条件が満たされている間に15分増やしたい日付があります。私の問題は、それが15分に一度足りるということです。 画面ごとの出力はこの操作と似ていますが、日付はあります。ループ内の日付に分を追加する方法

int i = 10; 
while (i <= 100){ 
    i = i + 15; 
    System.out.println(i); 
} 

Screen output 

10 
25 
40 
55 
70 
85 
100 

My code for the dates is the following 

while(hour < hourEnd){ 

hour = new Date(); 
hour = date.getDate(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(hour); 
cal.add(Calendar.MINUTE, 15); 
hour = cal.getTime(); 
} 
+1

ループの前に日付を作成します。現在、すべてのループに現在の時刻で新しい日付を作成してから15分を追加しますが、「15分追加」部分だけが実際にループ内にあるはずです。 –

+0

今や古くなっている厄介な古い日時クラスを、java.timeクラスに置き換えて使用しています。 –

答えて

3

私の問題はそれだけで一回15分まで追加することにあります。

あなたはそれが各反復で新しいDateを作成し、ループbegins.Otherwise前Dateを作成する必要があります。

hour = new Date(); 
Calendar cal = Calendar.getInstance(); 

while(hour < hourEnd){ 
    cal.setTime(hour); 
    cal.add(Calendar.MINUTE, 15); 
    hour = cal.getTime(); 
} 
3

避けレガシークラス

などDateCalendarとして古いレガシー日時クラスを避けてください。彼らはあまり設計されておらず、混乱し、欠陥があります。これらの古いクラスを置き換えるために、java.timeフレームワークがJavaに追加されました。

java.timeを使用

希望のタイムゾーンの現在の瞬間を取得します。

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdtNow = ZonedDateTime.now(z); 

どうやらあなたは、クロック時間の終わりに達するまで15分刻みを追加したいです。 Half-Openのアプローチでは、開始が包括的であるが終わりは排他的であるような時間のこのような時間を考えるのがよい。つまり、次の時の最初の瞬間までは実行したいが、それを含まないことを意味する。

ZonedDateTime zdtNextHourStart = zdtNow.plusHours(1).truncatedTo(ChronoUnit.HOURS) ; 

ここでループを増分します。

ZonedDateTime zdt = zdtNow ; 
List<ZonedDateTime> zdts = new ArrayList<>(4); 
while(zdt.isBefore(zdtNextHourStart)) { 
    zdts.add(zdt); 
    System.out.println(zdt); 
    // Prepare for next loop. 
    zdt = zdt.plusMinutes(15); 
} 
関連する問題