LoginSignup
1
1

More than 3 years have passed since last update.

Java Gold対策:フォーマット

Last updated at Posted at 2020-07-05

はじめに

本稿は、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についてはこちらを参照

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1