yyyy-MM-dd'T'HH:mm:ss.SSSz形式の日付をyyyy-mm-dd HH:mm:ss にフォーマットしようとしているのですが、簡単そうなのにうまくいきません。
解析しなければならない日付は、以下のような形になっています。2012-10-01T09:45:00.000+02:00
そこで、このシンプルな日付書式設定ツールを使って書式を設定します。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);
が、2012-10-01T09:45:00.000UTC+00:00のような出力になる。
また、パターンとして "yyyy-MM-dd'T'HH:mm:ss.SSSZ" と "yyyy-MM-ddH:mm:ss" で試しています。後者は2012-10-01T09:45:00 closeという形で日付を返しますが、まだそこまではしていません。
このため、これらの日付をフォーマットする適切な方法は何でしょうか。
例として、2012-10-01T09:45:00.000+02:00 を 2012-10-01 09:45:00 に変換してみたいと思います。
乾杯!(笑
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);
これは使えます。入力用と出力用の2つのSimpleDateFormatsを使用する必要がありますが、あなたが望んでいるものを得ることができます。
この問題には新しいテクノロジーがあります。Java8以降に組み込まれたjava.timeフレームワークです。
入力文字列は標準のISO 8601形式です。 その標準は、デフォルトでjava.timeクラスで日付時刻値のテキスト表現を解析/生成するために使用されます。
OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );
あなたの質問は、あなたが一秒に切り捨てたいことを示唆しています。
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );
オフセットとタイムゾーンの情報を省略したいようです。 事前定義されたフォーマッターDateTimeFormatter.ISO_LOCAL_DATE_TIME
がそれを行います。
そして、どうやら標準の「T」ではなく、中央のスペースを使用したいのです。 これについて独自のフォーマッターを定義することもできますが、文字列操作を実行して、 T
をSPACEに置き換えます。
String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );
質問のコメントが示唆するように、厳密に言えば、文字列でのみ作業し、日付時刻のオブジェクトに変換しないことで目標を達成できます。 ただし、これらの日付時刻値を処理する他のビジネスロジックがある可能性がある場合は、ここでこの回答を提供します。
----------。
java.time フレームワークは、Java 8以降に組み込まれています。 これらのクラスは、厄介な古いlegacyの日付/時刻クラスに取って代わります。 /javase/9/docs/api/java/util/Date.doc `.
Joda-Time プロジェクトは、メンテナンスモードになり、 [java.time]への移行をアドバイス(http://docs.oracle.com/javase/9/docs/packs/package.
詳細については、 Oracle Tutorial を参照してください。 そして、多くの例と説明については、スタックオーバーフローを検索してください。 仕様はJSR 310です?id = 310)。
java.timeクラスを取得する場所?
- Java SE 8 、[ Java SE 9 ](https://en.wikipedia.org/wiki /Java_version_history#Java_SE_9)、以降。 -ビルトイン。 -バンドルされた実装を備えた標準のJava APIの一部。 -Java 9はいくつかのマイナーな機能と修正を追加します。 - Java SE 6 および[ Java SE 7 ](https://en.wikipedia.org/wiki /Java_version_history#Java_SE7)。 -java.time機能の多くはJava 6&にバックポートされています。 ThreeTen-Backport の7。 -[ Android ](https://en.wikipedia.org/wiki/Android(operating_system))。 -java.timeクラスのAndroidバンドル実装の後のバージョン。 -以前のAndroidの場合、 ThreeTenABP プロジェクトは ThreeTen-Backport (上記)に適応します。 ThreeTenABPの使用方法... を参照してください。
ThreeTen-Extra プロジェクトは、java.timeを拡張し、追加のクラスを使用します。 このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。 Interval
、[YearWeek
](http ://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/.
もし、あなたのプロジェクトでJoda Timeを使用することが可能であれば、このコードは私のために動作します。
String dateStr = "2012-10-01T09:45:00.000+02:00";
String customFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter dtf = ISODateTimeFormat.dateTime();
LocalDateTime parsedDate = dtf.parseLocalDateTime(dateStr);
String dateWithCustomFormat = parsedDate.toString(DateTimeFormat.forPattern(customFormat));
System.out.println(dateWithCustomFormat);
JSON応答から受け取った日付文字列をフォーマットしようとしていました。 2016-03-09T04:50:00-0800からyyyy-MM-dd。 これが私が試したものであり、それは機能し、フォーマットされた日付文字列にカレンダーウィジェットを割り当てるのに役立ちました。
String DATE_FORMAT_I = "yyyy-MM-dd'T'HH:mm:ss";
String DATE_FORMAT_O = "yyyy-MM-dd";
SimpleDateFormat formatInput = new SimpleDateFormat(DATE_FORMAT_I);
SimpleDateFormat formatOutput = new SimpleDateFormat(DATE_FORMAT_O);
Date date = formatInput.parse(member.getString("date"));
String dateString = formatOutput.format(date);
これはうまくいきました。 ありがとう。
String dateStr = "2016-09-17T08:14:03+00:00";
String s = dateStr.replace("Z", "+00:00");
s = s.substring(0, 22) + s.substring(23);
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s);
Timestamp createdOn = new Timestamp(date.getTime());
mcList.setCreated_on(createdOn);
Java 7は、ISO 8601に準拠したタイムゾーン記述子のサポートを追加しました。 これはJava 7で使用できます。