|
日付や数値を文字列との間で変換するには、
それぞれDateFormat、NumberFormatクラスの
(インスタンス化可能な)
サブクラスが標準で幾つか用意されているので、それらを使うと便利です。
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
Date d = (new GregorianCalendar()).getTime();
String datestr = df.format(d);
|
DecimalFormat priceFormat = new DecimalFormat("#########.00");
String decstr = priceFormat.format(1234.56);
|
YYYYMMDDで返す例です。日付・時刻の各要素のとり得る最大値を返すメソッド
Calender#getActualMaximum() があるおかげで、末日の日付を得るのは楽です。
Calendar cal = Calendar.getInstance();
// 今月の末日の日付を整数で得る
int last = cal.getActualMaximum(Calendar.DATE);
DateFormat format = new SimpleDateFormat("yyyyMMdd");
Date d = (new GregorianCalendar()).getTime();
String datestr = format.format(d);
// 今月の1日
String startDate = datestr.substring(0, 6) + "01";
// 今月の末日
String endDate = datestr.substring(0, 6) + last;
|
java.text.SimpleDateFormat#parse()で日付を文字列からDate型へパースするとき、
"2005-05-40"のように、日付の書式は正しくても、実際には存在しない日付でもエラーになりません。
このような日付の場合にエラーにする(ParseExceptionを発生させる)には、
java.text.SimpleDateFormat#setLenient(false)
とします。
チェックを厳密にするためなのに、
trueではなくfalseを指定するのに注意して下さい!
同様のメソッドはjava.util.Calendarにもあります。
こちらも、set()で存在しない日付を設定しようとした際に例外が発生します。
また、これは仕様なのだと思いますが、例えばパターン"yyyyMMdd"のフォーマッタで、
"2005083x" のような文字列をparse()メソッドでパースするとエラーになりません。(8月3日と認識される)
これもチェックするには、別途構成する文字が全て数字であるかを確かめる、
といった処理も必要になるようです。
(first uploaded 2003/11/04 last updated 2005/05/02, URANO398)
|