web-dev-qa-db-ja.com

日付をyyyy-MM-dd形式に変換する方法は?

2012年12月1日(土)00:00:00 GMT 2012

上記の日付を以下の形式に変換する必要があります

2012-12-01

どうやって?

私は次の方法で試しましたが、動作しません

public Date ConvertDate(Date date){

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String s = df.format(date);
    String result = s;
    try {
        date=df.parse(result);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
  }
28
User 1531343

これを使って。

Java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String format = formatter.format(date);
System.out.println(format);

出力は次のようになります

2012-12-01
64

[〜#〜] update [〜#〜]ここでの私の答えは時代遅れです。 Joda-Timeプロジェクトはメンテナンスモードになり、Java.timeクラスへの移行を推奨しています。 Ole V.V.による回答 の最新のソリューションを参照してください。

ジョーダタイム

NidhishKrishnan によって受け入れられた答えは正しいです。

楽しみのために、ここに Joda-Time 2.3の同じ種類のコードがあります。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

Java.util.Date date = new Date(); // A Date object coming from other code.

// Pass the Java.util.Date object to constructor of Joda-Time DateTime object.
DateTimeZone kolkataTimeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeInKolkata = new DateTime( date, kolkataTimeZone );

DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy-MM-dd");
System.out.println( "dateTimeInKolkata formatted for date: " + formatter.print( dateTimeInKolkata ) );
System.out.println( "dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata );

実行すると…

dateTimeInKolkata formatted for date: 2013-12-17
dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30
4
Basil Bourque
String s;
Format formatter;
Date date = new Date();

// 2012-12-01
formatter = new SimpleDateFormat("yyyy-MM-dd");
s = formatter.format(date);
System.out.println(s);
3
Vinayak

Date自体をフォーマットすることはできません。 Stringでのみフォーマットされた結果を取得できます。他の人が述べたようにSimpleDateFormatを使用します。

さらに、ほとんどのgetter methods in Datedeprecated.

2
Mawia

最新の答え:Java.timeLocalDate、最新のJava日時API、およびそのtoStringメソッドを使用します。

    LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere
    String formattedDate = date.toString();
    System.out.println(formattedDate);

これは印刷します

2012-12-01

日付(話しているのはJava.util.DateJava.time.LocalDateか)にはフォーマットはありません。取得できるのは、何らかの形式を生成するtoStringメソッドだけです。toStringメソッドは変更できません。幸いなことに、LocalDate.toStringは要求された形式を正確に生成します。

Dateクラスは古くなっており、使用しようとしたSimpleDateFormatクラスは面倒です。これらのクラスを忘れて、代わりにJava.timeを使用することをお勧めします。最新のAPIは、非常に優れた機能を備えています。

ただし、変更できない、または今変更したくないレガシーAPIからDateを取得する場合があります。あなたがそれでできる最善のことは、それをJava.time.Instantに変換し、そこからさらなる操作を行うことです:

    Date oldfashoinedDate = // get from somewhere
    LocalDate date = oldfashoinedDate.toInstant()
            .atZone(ZoneId.of("Asia/Beirut"))
            .toLocalDate();

アジア/ベイルートでなかった場合は、希望のタイムゾーンに置き換えてください。その後、上記のように進みます。

リンク:Oracleチュートリアル:日時Java.timeの使用方法の説明。

1
Ole V.V.