はじめに
本稿は、Java Goldの学習のまとめとしてフォーマットについてまとめる。
フォーマットとは
Javaで扱うデータを表示箇所に応じて、
書式を変更したい場合に書式化するためのもの。
数値や、日付などでそれぞれフォーマットする
方法が異なるため、以下にそのフォーマットの
方法をまとめる。
数値のフォーマットで使用する主なクラス一覧
java.text.NumberFormat
java.text.DecimalFormat
■ java.text.NumberFormat
NumberFormatはnewすることが出来ないため、
staticメソッドによってオブジェクトを取得する。
NumberFormatの主なメソッドは以下
メソッド | 内容 |
---|---|
static final NumberFormat getInstance() | デフォルトロケールに対応した数値formatオブジェクトを返却 |
static final NumberFormat getInstance(Locale locale) | 引数に指定したロケールに対応した数値formatオブジェクトを返却 |
static final getCurrencyInstance() | デフォルトロケールに対応した通貨formatオブジェクトを返却 |
static final getCurrencyInstance() | 引数に指定したロケールに対応した通貨formatオブジェクトを返却 |
Number parse(String string) throws ParseException | 引数で指定された文字列を数値として返却 |
▼ 使用例
java.text.NumberFormat
// 出力結果:1,000
NumberFormat format = NumberFormat.getInstance();
System.out.println(format.format(1000));
// 出力結果:¥1,000
NumberFormat format = NumberFormat.getCurrencyInstance();
System.out.println(format.format(1000));
// 出力結果:1000
try {
NumberFormat format = NumberFormat.getInstance(Locale.JAPAN);
String numberStr = "1000";
Number value1 = format.parse(numberStr);
System.out.println(value1);
} catch (ParseException e) {
// 指定したロケールと異なる値(numberStr = "$1000")を指定した場合
}
■ java.text.DecimalFormat
DecimalFormatは、NumberFormatと異なりnewでオブジェクトを取得する。
また、以下パターンを使用することで自由にフォーマットをすることが出来る。
記号 | 内容 |
---|---|
0 | 数字(その桁に数値が無い場合は"0"を表示) |
♯ | 数字(その桁に数値が無い場合はブランク) |
. | 数字桁区切り文字 |
- | マイナス記号 |
, | カンマ区切り |
% | 100売してパーセントを表す |
¥u00a5 | 通貨記号 |
▼ 使用例
// 出力:1,11111
DecimalFormat formatter = new DecimalFormat("#,#####");
System.out.println(formatter.format(111111));
// 出力:01,1111
DecimalFormat formatter = new DecimalFormat("00,0000");
System.out.println(formatter.format(11111));
// 出力:¥11,11,11
DecimalFormat formatter = new DecimalFormat("\u00a5##,##");
System.out.println(formatter.format(111111));
// 備考(0埋め)
// DecimalFormat型
// 出力:0100.00
DecimalFormat formatter = new DecimalFormat("####.##");
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(4);
formatter.setMinimumIntegerDigits(4);
formatter.setMaximumIntegerDigits(6);
System.out.println(formatter.format(100));
日付のフォーマットで使用する主なクラス一覧
java.time.format.DateTimeFormatter
■ DateTimeFormatter
主に使用するメソッド一覧
メソッド | 内容 |
---|---|
static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle) | 日付のフォーマット |
static DateTimeFormatter ofLocalizedTime(FormatStyle timeStyle) | 時間のフォーマット |
static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle) | 日付と時間のフォーマット |
static DateTimeFormatter ofPattern(String pattern) | 引数に任意のパターン文字列を指定してフォーマッターを作成(パターンは以下に記載) |
パターン文字列一覧
パターン | 内容 |
---|---|
G | 西暦 |
y | 年 |
M | 月 |
d | 月の日 |
E | 曜日 |
a | 午前/午後 |
h | 時間(12時表記) |
H | 時間(24時表記) |
m | 分 |
s | 秒 |
SS | ミリ秒 |
x | タイムゾーン |
LocalDate date = LocalDate.of(2020, Month.JULY, 6);
LocalTime time = LocalTime.of(10, 20, 30);
LocalDateTime dateTime = LocalDateTime.of(date, time);
// 以下出力結果
// 2020/07/06
// 2020/07/06
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
System.out.println(formatter1.format(date));
System.out.println(formatter1.format(dateTime));
// 10:20:30
// dateをformatするとUnsupportedTemporalTypeException
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM);
System.out.println(formatter2.format(time));
// 10:20
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("hh:mm");
System.out.println(formatter3.format(time));
※ FormatStyleについてはこちらを参照