Home > Tags > Date

Date

Java, JSP: 現在時刻が指定期間内か判定する - GregorianCalendar#before、after

日時を扱うクラスはDateとGregorianCalendarがありますが、Sunは後者を推奨しているようです。実際GregorianCalendarのほうが扱いやすいです。下のサンプルは、現在時刻が指定した期間内か否かを判定するものです。

ソースコード

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <%!
    final int MONTH_OFFSET = 1;

    String showTime(Calendar cal) {
      String str;
      str = cal.get(Calendar.YEAR) + "/"
        + (cal.get(Calendar.MONTH) + MONTH_OFFSET)  + "/"
        + cal.get(Calendar.DATE) + " "
        + cal.get(Calendar.HOUR) + ":"
        + cal.get(Calendar.MINUTE);
      return str;
    }

    boolean isPeriod(Calendar start, Calendar end) {
      Calendar cur = Calendar.getInstance();
      return cur.after(start) && cur.before(end);
    }
  %>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Date Comparison</title>
    </head>
    <body>
        <h1>JSP Date Comparison</h1>
    <%
      // (year, month, date, hour, minute) monthの範囲は0-11で1月は0
      Calendar startTime = new GregorianCalendar(2009, 2 - MONTH_OFFSET, 23, 21, 0);
      Calendar endTime = new GregorianCalendar(2009, 2 - MONTH_OFFSET, 23, 21, 10);

      out.println("開始時刻: " + showTime(startTime) + "<br />");
      out.println("終了時刻: " + showTime(endTime) + "<br />");

      if (isPeriod(startTime, endTime)) {
        out.println("現時刻は指定期間「内」");
      } else {
        out.println("現時刻は指定期間「外」");
      }
    %>
    </body>
</html>

日時の比較はGregorianCalendar#after、beforeメソッド以外にint compareTo(Calendar cal)等もあります。
実際に使う際、期間を指定するGregorianCalendarのコンストラクタの引数データは他の入力から受け取るようにします。

実行結果例

本日の21:05に計ると…

JSP Date Comparison
開始時刻: 2009/2/23 9:0
終了時刻: 2009/2/23 9:10
現時刻は指定期間「内」

追記: SimpleDateFormatによる出力の整形

d_kamiさんに改良していただきました。ありがとうございます(^-^)

String showTime(Calendar cal) {
Date date = cal.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
return format.format(date);
}
と書けばすっきりするよ、import java.text.SimpleDateFormatを忘れずに - SimpleDateFormat - マイペースなプログラミング日記

showTimeを修正して計りなおした実行結果は、

開始時刻: 2009/02/23 21:00
終了時刻: 2009/02/24 21:10
現時刻は指定期間「内」

確かに出力はyyyy/MM/dd HH:mmの形式になっていて見栄えも良いです。

参考サイト

Python: 現在の日付・時刻の取得と出力 - datetimeクラスの属性、today()、strftime()メソッド

ソースコード

#!/usr/bin/python
# coding: UTF-8

# 現在の日付・時刻の取得と出力 | datetimeクラスの属性、today()、strftime()メソッドの使い方

import datetime # datetimeモジュールのインポート
import locale   # import文はどこに書いてもOK(可読性などの為、慣例でコードの始めの方)

# today()メソッドで現在日付・時刻のdatetime型データの変数を取得
d = datetime.datetime.today()
#   ↑モジュール名.クラス名.メソッド名

print 'd == %s : %s\n' % (d, type(d)) # Microsecond(10^-6sec)まで取得

# datetime型の各属性へのアクセス
# year, month, day
print '%s年%s月%s日\n' % (d.year, d.month, d.day)

# hour, minute, second, microsecond
print '%s時%s分%s.%s秒n' % (d.hour, d.minute, d.second, d.microsecond)

# strftime()メソッドで日付時刻の書式を指定して出力
print d.strftime("%Y-%m-%d %H:%M:%S"), '\n'

# 地域の設定
locale.setlocale(locale.LC_ALL, 'ja') # 属性の出力に影響(曜日とか)
print locale.getlocale(), '\n'

print d.strftime("%B%d日%A") # locale.setlocale()でlocale指定してないと"Fri"と表示(デフォルトの設定地域)
print d.strftime("%p")       # 指定の地域でのAM/PMの対応する文字列
print d.strftime("%x %X")    #               日付と時刻に対応する文字列

実行結果

d == 2008-06-06 11:50:25.964000 : <type 'datetime.datetime'>

2008年6月6日

11時50分25.964000秒

2008-06-06 11:50:25

('Japanese_Japan', '932')

6月06日金曜日
午前
2008/06/06 11:50:25

リファレンス

チュートリアル

Home > Tags > Date

バックナンバー
最近のコメント
最近のトラックバック
メタ情報

Return to page top