LoginSignup
2
2

More than 5 years have passed since last update.

時間計算をミリ秒で計算する

Posted at

Javaで時間の計算をミリ秒で計算し、条件分岐を作成したのでここにメモ

ポイント

  • ミリ秒にする(getMsecOfDay(int hour))
  • 本日の0時からのミリ秒を出す(getMsecOfDay(Date current))
  • 細かくメソッド化する(isHoliday()やisNight()など)

仕様

  • 平日(金曜以外)は営業時間を8-20
  • 金曜日の営業時間は8-17
  • 土日休み

必要なライブラリをimport

import java.util.Calendar;
import java.util.Date;

定数

// 業務終了とする時刻
private static final int FRIDAY_END_HOUR = 17;
// 平日の始業時刻
private static final int WEEKDAY_START_HOUR = 8;
// 平日の終業時刻
private static final int WEEKDAY_END_HOUR = 20;

ミリ秒

private static long getMsecOfDay(int hour) {
  // N時間 * 60分 * 60秒 * 1000ミリ秒
  return hour * (60 * 60 * 1000);
}

本日0時からのミリ秒


//1970/1/1~現在までのミリ秒 - 1970/1/1~現在0時までのミリ秒
private static long getMsecOfDay(Date current) {
  // 現在ミリ秒 - 同日0時のミリ秒で、0時から換算したミリ秒を算出する
  return current.getTime() - org.apache.commons.lang.time.DateUtils.truncate(current, Calendar.DATE).getTime();
}

土日

//土日は true を返す
private static boolean isHoliday() {
  int wday = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
  return wday == Calendar.SATURDAY || wday == Calendar.SUNDAY;
}

夜間の時間帯か判定

//夜20時 ~ 朝8時までの間の場合 true を返す
private static boolean isNight() {
  long baseTimeMsec = getMsecOfDay(new Date());
  return baseTimeMsec getMsecOfDay(WEEKDAY_START_HOUR) || getMsecOfDay(WEEKDAY_END_HOUR) <= baseTimeMsec;
}

土日と金曜17時以降


// 金曜日の17時以降、または土日の場合 true を返す
public static boolean isWeekend() {
  int wday = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
  long baseTimeMsec = getMsecOfDay(new Date());
  // 金曜日17~または土日はサービス時間外
  return (getMsecOfDay(FRIDAY_END_HOUR) < baseTimeMsec && wday == Calendar.FRIDAY) || isHoliday();
}

営業時間外

//金曜日17時以降、または土日の場合、また平日の20時〜8時の場合は true を返す
public static boolean isOutOfService() {
  return isWeekend() || (isNight() && !isHoliday());
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2