39

次のように SAX 解析から日付文字列を取得しています: Wed, 18 Apr 2012 07:55:29 +0000

今、私はこの文字列を次のようにしたい: 2012 年 4 月 18 日 01:25 PM

これどうやってするの?

4

7 に答える 7

142
SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm a");
String date = format.format(Date.parse("Your date string"));

アップデート :-

のように、Date.parse("Your date string");非推奨です。

String strCurrentDate = "Wed, 18 Apr 2012 07:55:29 +0000";
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss Z");
Date newDate = format.parse(strCurrentDate);

format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date = format.format(newDate);
于 2012-05-03T06:53:26.027 に答える
20

This will do it:

public static String formateDateFromstring(String inputFormat, String outputFormat, String inputDate){

    Date parsed = null;
    String outputDate = "";

    SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
    SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());

    try {
        parsed = df_input.parse(inputDate);
        outputDate = df_output.format(parsed);

    } catch (ParseException e) { 
        LOGE(TAG, "ParseException - dateFormat");
    }

    return outputDate;

}

Example:

String date_before = "1970-01-01";
String date_after = formateDateFromstring("yyyy-MM-dd", "dd, MMM yyyy", date_before);

Output:

date_after = "01, Jan 1970";
于 2013-10-17T20:34:19.217 に答える
6

公式ドキュメントから、新しい API (18+) では、これを実装する必要があります。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
String time=sdf.format(new Date());

ドキュメント: http://developer.android.com/reference/java/text/SimpleDateFormat.html

于 2014-05-14T04:57:42.707 に答える
1

java.time と ThreeTenABP

この質問に対する現代の答えは遅れています。この質問が2012年に尋ねられたとき、これらのクラスは常に面倒でしたが、他の回答と同じようにSimpleDateFormatand/orを使用することは正しかったです。DateFormatそれらは、ほんの数年後に最新の Java の日付と時刻の API である java.time に置き換えられました。だから私はやっています。

変換を 2 つの操作に分けることをお勧めします。プログラムでは、日付と時刻を文字列として保持しないでください。それらを適切な日時オブジェクトとして保持してください。そのため、SAX から解析する場合も、日時文字列をOffsetDateTimeすぐに解析します。後でユーザーに日付と時刻を表示する (または別のシステムに送信する) 必要がある場合は、それをユーザーのタイム ゾーンに変換し、その目的に適した文字列にフォーマットします。

OffsetDateTime に解析する

取得した文字列は RFC 1123 形式に準拠しています。java.time には、そのためのフォーマッターが組み込まれています。これは、独自のフォーマッターを作成する手間を省いてくれるので便利です。

    String stringFromSaxParsing = "Wed, 18 Apr 2012 07:55:29 +0000";

    OffsetDateTime dateTime = OffsetDateTime.parse(
            stringFromSaxParsing, DateTimeFormatter.RFC_1123_DATE_TIME);

    System.out.println(dateTime);

このスニペットからの出力は次のとおりです。

2012-04-18T07:55:29Z

ユーザーのタイムゾーンとフォーマットに変換

    DateTimeFormatter wantedFormatter = DateTimeFormatter.ofPattern("MMM dd, uuuu hh:mm a", Locale.ENGLISH);

    String formatted = dateTime.atZoneSameInstant(ZoneId.systemDefault())
            .format(wantedFormatter);

    System.out.println(formatted);

これをアジア/コロンボのタイムゾーンで実行したところ、目的のものが得られました:

2012 年 4 月 18 日 01:25 午後

質問: java.time は Android API レベル 26 を必要としませんか?

java.time は、古い Android デバイスでも新しい Android デバイスでもうまく機能します。少なくともJava 6が必要です。

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

リンク

于 2020-01-14T03:02:39.263 に答える