web-dev-qa-db-ja.com

SimpleDateFormatを使用して文字列を日付に変換する方法は?

私はこのコードスニペットを持っています:

DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));

これを実行すると、出力として次のようになります。

Sun Jan 16 00:10:00 IST 2011

私は期待した:

Tue Aug 16 "Whatever Time" IST 2011

私は月が期待どおりになっていないと言いたいです。間違いは何ですか?

60
Shantanu Tomar

これを試して:

new SimpleDateFormat("MM/dd/yyyy")
  • MMは「月」です(mmではありません)
  • ddは「日」です(DDではありません)

すべてが SimpleDateFormatのjavadoc にあります


FYI、形式がまだ有効な日付形式である理由は次のとおりです。

  • mmは「分」です
  • DDは「年の日」です

また、Dateへのキャストは必要ありません...すでにisDate(または爆発):

public static void main(String[] args) throws ParseException {
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}

出力:

Tue Aug 16 00:00:00 EST 2011

出来上がり!

89
Bohemian

m-最小M-月

Letter  Date or Time Component  Presentation    Examples
G       Era designator          Text                AD
y       Year                    Year                1996; 96
M       Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800 
45
jahir

以下の機能を使用してください

/**
     * Format a time from a given format to given target format
     * 
     * @param inputFormat
     * @param inputTimeStamp
     * @param outputFormat
     * @return
     * @throws ParseException
     */
    private static String TimeStampConverter(final String inputFormat,
            String inputTimeStamp, final String outputFormat)
            throws ParseException {
        return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
                inputFormat).parse(inputTimeStamp));
    }

サンプルの使用法は次のとおりです。

    try {
        String inputTimeStamp = "08/16/2011";

        final String inputFormat = "MM/dd/yyyy";
        final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";

        System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
                outputFormat));

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
11
String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));
7
kandarp

非常に簡単な例です。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
                Date date = new Date();
                Date date1 = new Date();
            try {
                System.out.println("Date1:   "+date1);
                System.out.println("date" + date);

                date = simpleDateFormat.parse("01-01-2013");
                date1 = simpleDateFormat.parse("06-15-2013");

                System.out.println("Date1 is:"+date1);
                System.out.println("date" + date);

            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
4
Krishna

このコードは、前後に変換するのに役立ちます

    System.out.println("Date: "+ String.valueOf(new Date()));
    SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String stringdate = dt.format(new Date());
    System.out.println("String.valueOf(date): "+stringdate);

    try {
    Date date = dt.parse(stringdate);
    System.out.println("parse date: "+ String.valueOf(date));
    } catch (ParseException e) {
    e.printStackTrace();
    }
4

最初に指定された文字列を日付オブジェクトに変換するなど、非常に簡単に問題を解決できます。例:

Java.util.Date date1 = new Date("11/19/2015"); 
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);
3
BEN SEBASTIAN
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
    System.out.println(LocalDate.parse("08/16/2011", dateFormatter));

出力:

2011-08-16

私は現代の答えに貢献しています。 ボヘミアンの答え は正解であり、6年前に書かれたときには良い答えでした。現在、悪名高い厄介なSimpleDateFormatクラスは古くなっており、最新のJava日時APIであるJava.timeの方がはるかに優れています。古い日時クラスの代わりにこれを使用することをお勧めします。

あなたのコードで何が間違っていましたか?

スニペットを使用して08/16/2011を解析すると、Sun Jan 16 00:08:00 CET 2011が返されます。小文字のmmは分単位であるため、00:08:00(真夜中の8分前)を取得し、大文字のDDは年中の日付であるため、1月16日を取得します。

Java.timeでもフォーマットパターン文字列は大文字と小文字が区別され、月には大文字のMMを使用し、日には小文字のddを使用する必要がありました。

質問:JavaバージョンでJava.timeを使用できますか?

はい、Java.timeはJava6以降および古いおよび新しいAndroidデバイスの両方でうまく機能します。

  • Java 8以降および新しいAndroidデバイス(APIレベル26からのことです)では、最新のAPIが組み込まれています。
  • Java 6および7で、新しいクラスのバックポートであるThreeTenバックポートを取得します(JSR 310用のThreeTen。下部のリンクを参照)。
  • (古い)AndroidでThreeTen BackportのAndroidエディションを使用します。 ThreeTenABPと呼ばれます。そして、サブパッケージを使用してorg.threeten.bpから日時クラスをインポートしてください。

リンク集

2
Ole V.V.
String localFormat = Android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);

デバイスの言語に基づいた形式を返します。 getBestDateTimePattern()は、「指定されたロケールの指定されたスケルトンの可能な限り最適なローカライズ形式」を返すことに注意してください。

1
Dan Alboteanu

いくつかのタイプエラーを使用しました。 8/16/2011を次のパターンに設定する場合。間違っているのは、

mmminutesを表し、MMをそのまま使用しますMonths

DD間違ったである必要がありますddDaysを表します

取得したい出力を達成するためにこれを試してください(Tue Aug 16 "Whatever Time" IST 2011)、

    String date = "08/16/2011"; //input date as String

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern

    Date myDate = simpleDateFormat.parse(date); // returns date object 

    System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011
1
Dulith De Costa