web-dev-qa-db-ja.com

Javaの異なる形式で文字列を日付に解析する

StringDateにさまざまな形式で変換したい。

例えば、

ユーザーから取得しています

String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format

このfromDate"yyyy-MM-dd"形式のDateオブジェクトとして変換したい

これどうやってするの?

83
Gnaniyar Zubair

SimpleDateFormat を見てください。コードは次のようになります。

SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

try {

    String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
    e.printStackTrace();
}
174
Michael Myers

SimpleDateFormat クラスを使用します。

private Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat(format);
    return formatter.parse(date);
}

使用法:

Date date = parseDate("19/05/2009", "dd/MM/yyyy");

効率を上げるために、ハッシュマップにフォーマッターを保存することをお勧めします。ハッシュマップは、utilクラスの静的メンバーです。

private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();

public static Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = hashFormatters.get(format);

    if (formatter == null)
    {
        formatter = new SimpleDateFormat(format);
        hashFormatters.put(format, formatter);
    }

    return formatter.parse(date);
}
12
Agora

tl; dr

LocalDate.parse( 
    "19/05/2009" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
)

詳細

Java.util.DateJava.sql.Date、およびSimpleDateFormatを含む他の回答は現在では古くなっています。

LocalDate

日時を実行するための最新の方法は、Java.timeクラス、特にLocalDateを使用することです。 LocalDate クラスは、時刻およびタイムゾーンのない日付のみの値を表します。

DateTimeFormatter

日付時刻値を表す文字列を解析または生成するには、 DateTimeFormatter クラスを使用します。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );

日付時刻オブジェクトを、その値を表す文字列と混同しないでください。日時オブジェクトにはno形式がありますが、文字列にはあります。 LocalDateなどの日時オブジェクトは、その内部値を表すストリングをgenerateできますが、日時オブジェクトとストリングは別個の別個のオブジェクトです。

任意のカスタム形式を指定して、文字列を生成できます。または、Java.timeに自動ローカライズの作業をさせます。

DateTimeFormatter f = 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );

コンソールにダンプします。

System.out.println( "ld: " + ld + " | output: " + output );

ld:2009-05-19 |出力:mardi 19 mai 2009

IdeOne.com の実際の動作を参照してください。


Java.timeについて

Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.DateCalendar 、および SimpleDateFormat などの厄介な古い レガシー 日時クラスに取って代わります。

メンテナンスモード になった Joda-Time プロジェクトは、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 31 です。

Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列やJava.sql.*クラスは必要ありません。

Java.timeクラスはどこで入手できますか?

  • Java SE 8Java SE 9 、およびそれ以降
    • ビルトイン。
    • 実装がバンドルされた標準Java AP​​Iの一部。
    • Java 9は、いくつかのマイナーな機能と修正を追加します。
  • Java SE 6 および Java SE 7
    • Java.time機能の多くは、 ThreeTen-Backport のJava 6および7にバックポートされています。
  • Android
    • Androidの後のバージョンは、Java.timeクラスの実装をバンドルします。
    • 以前のAndroid(<26)の場合、 ThreeTenABP プロジェクトはThreeTen-Backport(上記)に適合します。 ThreeTenABPの使用方法… を参照してください。

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 IntervalYearWeekYearQuarter 、および more などの便利なクラスがあります。

10
Basil Bourque

文字列の日付をJava.sql.Dateに変換する

String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Java.util.Date dtt = df.parse(fromDate);
Java.sql.Date ds = new Java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
7
Ritesh Kaushik

Java.text.SimpleDateFormat のjavadocsを確認してください。必要なものすべてが説明されています。

5
Matt

SimpleDateFormat は実際にニーズに対応しますが、さらに、 Joda Time を確認することをお勧めします。これは、明らかにJava 7 。あまり使用していませんが、良いことしか聞いていないので、プロジェクトで日付を広範囲にわたって操作する場合は、検討する価値があるでしょう。

3
James McMahon

日付をフォーマットして文字列に変換する簡単な方法

    Date date= new Date();

    String dateStr=String.format("%td/%tm/%tY", date,date,date);

    System.out.println("Date with format of dd/mm/dd: "+dateStr);

出力:dd/mm/dd形式の日付:21/10/2015

1
Khalid Habib

Dateオブジェクトにはフォーマットなしがあり、これは表現です。日付はStringお好みの形式で表示できます。

例えば。 「yyyy-MM-dd」、「yy-MMM-dd」、「dd-MMM-yy」など.

これを実現するには、SimpleDateFormatを使用できます。

これを試して、

        String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format

        SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); 
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
            String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
            System.out.println(dateMyFormat); // outputs : 2009-05-19

        } catch (ParseException e) {
            e.printStackTrace();
        }

これは2009-05-19を出力します

1
Dulith De Costa