Servlets-handling-date
サーブレット-処理日
サーブレットを使用する最も重要な利点の1つは、コアJavaで使用可能なほとんどのメソッドを使用できることです。 このチュートリアルでは、 java.util パッケージで利用可能なJava提供の Date クラスについて説明します。このクラスは現在の日付と時刻をカプセル化します。
Dateクラスは2つのコンストラクターをサポートします。 最初のコンストラクターは、現在の日付と時刻でオブジェクトを初期化します。
Date( )
次のコンストラクターは、1970年1月1日午前0時から経過したミリ秒数に等しい1つの引数を受け入れます。
Date(long millisec)
日付オブジェクトが利用可能になったら、次のサポートメソッドのいずれかを呼び出して日付を再生できます-
Sr.No. | Methods & Description |
---|---|
1 |
boolean after(Date date) 呼び出したDateオブジェクトにdateで指定された日付よりも後の日付が含まれている場合はtrueを返し、それ以外の場合はfalseを返します。 |
2 |
boolean before(Date date) 呼び出したDateオブジェクトにdateで指定された日付よりも前の日付が含まれている場合はtrueを返し、それ以外の場合はfalseを返します。 |
3 |
Object clone( ) 呼び出し日付オブジェクトを複製します。 |
4 |
int compareTo(Date date) 呼び出しオブジェクトの値と日付の値を比較します。 値が等しい場合は0を返します。 呼び出しオブジェクトが日付より前の場合、負の値を返します。 呼び出しオブジェクトが日付より後の場合、正の値を返します。 |
5 |
int compareTo(Object obj) objがDateクラスの場合、compareTo(Date)と同じように動作します。 それ以外の場合、ClassCastExceptionがスローされます。 |
6 |
boolean equals(Object date) 呼び出したDateオブジェクトにdateで指定された日時と同じ日時が含まれる場合はtrueを返し、そうでない場合はfalseを返します。 |
7 |
long getTime( ) 1970年1月1日から経過したミリ秒数を返します。 |
8 |
int hashCode( ) 呼び出し元オブジェクトのハッシュコードを返します。 |
9 |
void setTime(long time) 1970年1月1日午前0時からの経過時間をミリ秒単位で表すtimeで指定された時刻と日付を設定します。 |
10 |
String toString( ) 呼び出しDateオブジェクトを文字列に変換し、結果を返します。 |
現在の日付と時刻を取得する
これにより、Java Servletで現在の日付と時刻を簡単に取得できます。 次のように、現在の日付と時刻を印刷するために_toString()_メソッドで単純なDateオブジェクトを使用できます-
//Import required java libraries
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
//Extend HttpServlet class
public class CurrentDate extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Display Current Date & Time";
Date date = new Date();
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + date.toString() + "</h2>\n" +
"</body>
</html>"
);
}
}
次に、上記のサーブレットをコンパイルしてweb.xmlに適切なエントリを作成し、URL http://localhost:8080/CurrentDateを使用してこのサーブレットを呼び出します。 これは、次の結果を生成します-
Display Current Date & Time
Mon Jun 21 21:46:49 GMT+04:00 2010
URL http://localhost:8080/CurrentDateを更新しようとすると、更新するたびに秒単位の違いが見つかります。
日付比較
前述したように、サーブレットで使用可能なすべてのJavaメソッドを使用できます。 あなたが2つの日付を比較する必要がある場合には、以下の方法があります-
- getTime()を使用して、両方のオブジェクトについて1970年1月1日の午前0時から経過したミリ秒数を取得し、これら2つの値を比較できます。
- メソッドbefore()、after()、およびequals()を使用できます。 たとえば、月の12日は18日より前なので、new Date(99、2、12).before(new Date(99、2、18))はtrueを返します。
- Comparableインターフェースによって定義され、Dateによって実装されるcompareTo()メソッドを使用できます。
SimpleDateFormatを使用した日付の書式設定
SimpleDateFormatは、ロケールに依存した方法で日付をフォーマットおよび解析するための具象クラスです。 SimpleDateFormatを使用すると、日時の書式設定にユーザー定義のパターンを選択することから開始できます。
上記の例を次のように変更しましょう-
//Import required java libraries
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
//Extend HttpServlet class
public class CurrentDate extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Display Current Date & Time";
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + ft.format(dNow) + "</h2>\n" +
"</body>
</html>"
);
}
}
上記のサーブレットをもう一度コンパイルし、URL http://localhost:8080/CurrentDateを使用してこのサーブレットを呼び出します。 これは、次の結果を生成します-
Display Current Date & Time
Mon 2010.06.21 at 10:06:44 PM GMT+04:00
単純なDateFormat形式コード
時間形式を指定するには、時間パターン文字列を使用します。 このパターンでは、すべてのASCII文字はパターン文字として予約されており、次のように定義されています-
Character | Description | Example |
---|---|---|
G | Era designator | AD |
y | Year in four digits | 2001 |
M | Month in year | July or 07 |
d | Day in month | 10 |
h | Hour in A.M./P.M. (1~12) | 12 |
H | Hour in day (0~23) | 22 |
m | Minute in hour | 30 |
s | Second in minute | 55 |
S | Millisecond | 234 |
E | Day in week | Tuesday |
D | Day in year | 360 |
F | Day of week in month | 2 (second Wed. in July) |
w | Week in year | 40 |
W | Week in month | 1 |
a | A.M./P.M. marker | PM |
k | Hour in day (1~24) | 24 |
K | Hour in A.M./P.M. (0~11) | 10 |
z | Time zone | Eastern Standard Time |
' | Escape for text | Delimiter |
" | Single quote | ` |
日付を操作するために使用可能な定数メソッドの完全なリストについては、標準のJavaドキュメントを参照できます。