便利なコードパーツ集!

やまろうのプログラミングTips

Java

Javaで指定した時刻の次の00分、30分を求める方法

投稿日:

2007/04

意外とどうやればいいかわかりにくいのが、日付の計算です。
一番シンプルなのがCalendarをm秒に直して引き算して1日のm秒で割る
方法です。

package sample;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class NextTime {
	/** 日付整形フォーマット */ 
	private static SimpleDateFormat dateFormat =
		new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

	public static void main(String[] args) {
		//GregorianCalendarの月は0から始まる。3が4月。
		test(new GregorianCalendar(2007, 3, 1, 03, 00));
		test(new GregorianCalendar(2007, 3, 1, 03, 01));
		test(new GregorianCalendar(2007, 3, 1, 03, 30));
		test(new GregorianCalendar(2007, 3, 1, 03, 31));
		test(new GregorianCalendar(2007, 3, 1, 03, 59));
		test(new GregorianCalendar(2007, 3, 1, 04, 00));
	}
	
	/**
	 * getNext30Miniteを実行し結果を標準出力する。
	 * @param calendar 変換する日付
	 */
	private static void test(Calendar calendar) {
		System.out.print(dateFormat.format(calendar.getTime()));
		System.out.print(" → ");
		calendar = getNext30Minite(calendar);
		System.out.println(dateFormat.format(calendar.getTime()));
	}
	
	/**
	 * 渡された日付の分が次に00または30となる時刻となる日付を返す。
	 * 例<br>
	 * 入力 03:00 → 変換後 03:00<br>
	 * 入力 03:01 → 変換後 03:30<br>
	 * 入力 03:30 → 変換後 03:30<br>
	 * 入力 03:31 → 変換後 04:00<br>
	 * 入力 03:59 → 変換後 04:00<br>
	 * 入力 04:00 → 変換後 04:00<br>
	 *  
	 * @param calendar 変換する日付
	 * @return 渡された日付の次の00分または30分となる時刻
	 */
	public static Calendar getNext30Minite(Calendar calendar) {
		int minute = calendar.get(Calendar.MINUTE);
		int minuteSub = minute - 30;
		int addValue = minuteSub * -1;
		if (minuteSub > 0) {
			addValue = 60 - minute;
		}
		calendar.add(Calendar.MINUTE, addValue);
		return calendar;
	}
}

[実行結果]

>javac -d . NextTime.java
>java sample.NextTime
2007/04/01 03:00:00 → 2007/04/01 03:30:00
2007/04/01 03:01:00 → 2007/04/01 03:30:00
2007/04/01 03:30:00 → 2007/04/01 03:30:00
2007/04/01 03:31:00 → 2007/04/01 04:00:00
2007/04/01 03:59:00 → 2007/04/01 04:00:00
2007/04/01 04:00:00 → 2007/04/01 04:30:00

ぴったり次の30分が出てますね!

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2022 AllRights Reserved Powered by AFFINGER4.