遅刻の「言い訳」選手権

javaで質問です。
文字列2023/2/3(一桁の場合、0埋めなし)の場合にyyyyMMddに変換したいのですが、1番効率の良い変化や方法はありますか?
java7です。

A 回答 (3件)

Javaには、文字列を日付フォーマットに変換するための標準的なAPIがあります。

次のように、文字列をDateオブジェクトに変換し、SimpleDateFormatクラスを使用して指定の日付フォーマットに変換することができます。

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
public static void main(String[] args) throws Exception {
String dateString = "2023/2/3";
Date date = new SimpleDateFormat("yyyy/M/d").parse(dateString);
String formattedDate = new SimpleDateFormat("yyyyMMdd").format(date);
System.out.println(formattedDate); // 20230203
}
}

このコードでは、まず、SimpleDateFormatを使用して、入力文字列をDateオブジェクトに変換しています。その後、再度SimpleDateFormatを使用して、yyyyMMddフォーマットに変換しています。変換結果はformattedDate変数に格納され、標準出力に出力されます。

なお、上記のコードでは、入力文字列が常に正しい形式であることを前提としています。もし入力文字列が不正な場合は、ParseExceptionがスローされますので、適宜例外処理を行ってください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

yyyy/M/dとなってますが、
12月30日の場合はフォーマットが変わるてことすよね?
一桁なのか二桁なのか毎回判定しないといけないということでしょうか。

お礼日時:2023/02/20 13:48

> yyyy/M/dとなってますが、



資料を読みましょう
https://docs.oracle.com/javase/jp/8/docs/api/jav …

抜粋すると
* パターン文字の数で正確な表現が決まる
* 数値のフォーマットでは、パターン文字の数は最小桁数
* 数値の解析では、パターン文字の数は無視

であるため、解析(parse) では M で問題ありません
    • good
    • 0

Java 7では、SimpleDateFormatクラスを使用して、指定された日付文字列を指定されたフォーマットに変換することができます。



以下は、SimpleDateFormatを使用して、文字列"2023/2/3"を"yyyyMMdd"のフォーマットに変換する例です。

String inputDate = "2023/2/3";
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy/M/d");
Date date = inputFormat.parse(inputDate);

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd");
String outputDate = outputFormat.format(date);

System.out.println(outputDate); // 出力:20230203


この例では、まずSimpleDateFormatを使用して、日付文字列をDateオブジェクトに変換しています。次に、別のSimpleDateFormatを使用して、Dateオブジェクトを"yyyyMMdd"のフォーマットに変換しています。

この方法は、SimpleDateFormatのインスタンスを2つ作成する必要がありますが、単純で効率的な方法です。ただし、SimpleDateFormatはスレッドセーフではないため、マルチスレッドアプリケーションで使用する場合は注意が必要です。また、SimpleDateFormatはJava 8から非推奨となっており、代わりにjava.timeパッケージのクラスを使用することが推奨されています。
    • good
    • 0
この回答へのお礼

ありがとうございます。

yyyy/M/dとなってますが、
12月30日の場合はフォーマットが変わるてことすよね?
一桁なのか二桁なのか毎回判定しないといけないということでしょうか。

お礼日時:2023/02/20 13:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A