日付・数値のフォーマット

日付や数値を文字列との間で変換するには、 それぞれ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);


今月の1日と末日の日付を得る

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;


SimpleDateFormatの注意点

 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日と認識される) これもチェックするには、別途構成する文字が全て数字であるかを確かめる、 といった処理も必要になるようです。

Java kowaza Top

(first uploaded 2003/11/04 last updated 2005/05/02, URANO398)

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル