日付、時間、分を含むISO 8601形式で現在の時刻を取得する方法は?


323

現在の瞬間、UTCのISO 8601形式のプレゼンテーションを取得する最もエレガントな方法は何ですか?次のようになります2010-10-12T08:50Z

例:

String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);


5
@marcolopes aの使用はprivate static SimpleDateFormatスレッドセーフではないことに注意してください。
vegemite4me 2014


この他の質問と同様ですが、この質問は1秒ごとに切り捨てられますが、この質問は1分ごとに切り捨てられます。
バジル

回答:


292

使用SimpleDateFormatして、必要なDateオブジェクトをフォーマットします。

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

new Date()上記のようにa を使用すると、現在の時刻がフォーマットされます。


8
@Joachimこの「標準的な」アプローチのマイナス面は"yyyy-MM-dd'T'HH:mmZ"、ISO-8601形式の日付が必要になるたびに、アプリケーションに多くのインスタンスが必要になることです。私が見るようJodaTimeで、私は事前に定義されたフォーマッタを使用することができますISODateTimeFormat...私のためにこの仕事をして、
yegor256を

8
@Joachim ZはSimpleDateFormatの有効なパターンであり、次のようにしyyyy-MM-dd'T'HH:mm'Z'ます。
ブハケシンディ

33
-1これは、UTCではなく、現在のタイムゾーンでの日付/時刻を示します。カルロスの回答には、必要なUTCコードが含まれています。
Scott Rippey

16
タイムゾーンの間違いを修正しました。これは受け入れられた回答なので、正しいことだと思います。
BoD 2013

2
Zは "yyyy-MM-dd'T'HH:mm'Z '"のように引用する必要があります
キンボールロビンソン

224

デフォルトのタイムゾーンがUTCではないシステムの場合:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

SimpleDateFormatインスタンスが頻繁に必要に応じて、グローバル定数として宣言されますが、このクラスはスレッドセーフではないことを注意してくださいすることができます。複数のスレッドが同時にアクセスする場合は、同期する必要があります。

編集:多くの異なる時刻/日付操作を行う場合は、Joda Timeを使用します...
EDIT2:修正済み:setTimeZone文字列を受け入れません(Paulによって修正済み)


9
この形式は、一部の組み込みライブラリのどこにも定数ではありませんか?
Daniel Kaplan 2014年

「DateFormat」には2つの異なるパッケージがあります。「import java.text.DateFormat」を使用することを忘れないでください
oabarca

3
現在のタイムゾーンが必要な場合は、TimeZone tz = TimeZone.getDefault();を使用します。代わりに
oabarca 2014年

'Z'を論理的に意味のないものにするため、この形式で引用符を付けないでください。上記の例のようにTimeZoneがUTCの場合、引用符で囲まれていないZは出力にZのみを生成します。ただし、TimeZoneがUTCでない場合、Zは、時間がない場合でも文字通りUTCとして出力されます。あります。消費しているシステムがZをUTCとして読み取るが、時間ではない場合、時間はシフトされます。逆に、パーサーがTimeZoneを設定せずに引用符で囲まれたZを使用する場合、UTC時間をローカル時間として解析します(これもシフトします)。この見積もりは、TZが設定されている場合は不要ですが、設定されていない場合は危険です。
Matt Whipple 2016年

@MattWhipple-しかし、引用符で囲まれていないZを使用すると、結果は次のようになります2016-06-14T13:56+0000-質問は次のようなものを求めています2016-06-14T13:56Z
user85421

184

Java 8ネイティブ

java.timeを使用すると、Java 8以降でスレッドが安全になります。

ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )

結果: 2015-04-14T11:07:36.639Z

またはTemporalなどのライターを使用したくなるかもしれませんが、フォーマッタのサポートやタイムゾーンデータが不足しています。箱から出しただけで動作します。InstantLocalDateTimeZonedDateTime

ZonedDateTimeおよびDateTimeFormatterのオプション/操作を調整またはチェーンすることにより、タイムゾーン精度をある程度まで簡単に制御できます。

ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )

結果: 2015-04-14T11:07:00+01:00[Europe/Paris]

秒の部分の削除などの洗練された要件は、カスタム形式またはカスタム後処理によって提供される必要があります。

.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07

Java 6および7の場合は、Androidポートも備えたThreeTen-Backportなどのjava.timeのバックポートを検討してください。どちらもJodaよりも軽量で、Jodaの経験から学んでいます。java.timeはJodaの作者が設計したと考えてください。


9
いい答えだ。JVMの現在のデフォルトのタイムゾーンに暗黙的に依存するのではなく、タイムゾーンを明示的に指定するという良い習慣に注意してください。のように、必要に応じて特定のタイムゾーンを指定できますZoneId.of( "America/Montreal" )
バジルブルク2016

1
インスタントだけ.toString()メソッドを呼び出すことにより、ISO 8601形式でフォーマットすることができます:return DateTimeFormatter.ISO_INSTANT.format(this);
VadymVL

デフォルトを回避するため、これが最適です。
Christophe Roussy

6
警告:ISO_INSTANTを使用するJava 8のソリューションには、迷惑な癖があります。ミリ秒がたまたま0の場合、出力には含まれません。これはISO 8601標準に従って許可されていますが、他の言語の多くのライブラリーとパーサーはそれほど寛容ではありません。常にゼロを含める必要がある場合は、代わりにこれを使用します。DateTimeFormatter ISO_8601 = ofPattern( "yyyy-MM-dd'T'HH:mm:ss.SSSX")。withZone(UTC);
jurgen 2018

Java 8から11に切り替えた後、私は秒の後に6桁を表示DateTimeFormatter.ISO_INSTANTしてDateTimeFormatter.ISO_DATE_TIME使用します。これは、Springでもはや取得されない3桁ではありません@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
DanielM

126

Java 8:

thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
                              .withZone(ZoneOffset.UTC)
                              .format(Instant.now());

Java 8より前:

thisMoment = String.format("%tFT%<tRZ",
                           Calendar.getInstance(TimeZone.getTimeZone("Z")));

ドキュメントから:

'R'
'F'    "%tH     :%tM"として24時間形式でフォーマットされた時刻ISO 8601完全な日付は "%tY-%tm-%td"としてフォーマットされます。


26
まあ、プロジェクトへの依存関係として追加のサードパーティライブラリを含め(最新の状態に保ち、アプリケーションに同梱することもできますが、追加の3.2メガバイトです) DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);、またはカプセル化します。return String.format("%tFT%<tRZ", new Date());クラスに、そしてstr = Iso8601Time.now()あなたがそれを必要とするところはどこでもそうしなさい。(ISO形式が変更されるようなわけではありません。)ISO形式の現在の日付だけでなく、他にも必要なことが判明した場合は、libを使用してください。
aioobe

2
これに完全に同意します。
yegor256

3
どの回答を承認済みとしてマークするかを変更することができることに注意してください;-)
aioobe

8
%tFT%<tTZ秒が含まれます。%tFT%<tTZ.%<tLミリ秒が含まれます。
Patrick Linskey、2012

2
非常にきちんとした解決策は、今までに受け入れられた答えになるはずです:)
AbdelHady

94

Java 8以降では、次のように簡単に実行できます。

Instant.now().toString();

java.time.Instantドキュメントから:


public static Instant now()

システムクロックから現在のインスタントを取得します。

これにより、システムのUTCクロックが照会され、現在の瞬間が取得されます。

 


public String toString()

ISO-8601表現を使用したこのインスタントの文字列表現。

使用される形式はと同じDateTimeFormatter.ISO_INSTANTです。


11
これは正解であり、これらすべての調停されたものよりも高く支持されていないことはスキャンダルですSimpleDateFormats
デビッドモレス

もっと回答を読んでよかった。私は同意します、これが今の答えになるはずです。
Xan-Kun Clark-Davis

また、それはなのでtoString、多くの場合、明示的に呼び出す必要すらありません。
kaya3

1
以前の回答に対するコメントの警告もここに適用されます。標準ですが、他の言語の多くのライブラリとパーサーはそれほど寛大ではありません。」
デイブL.

27

JodaTimeを使用する

ISO 8601カレンダーシステムは、Joda-Time内のデフォルトの実装です

ここにがJodaTime Formatterのドキュメントです

編集:

追加したくない場合、または上記のライブラリを追加する価値がない場合は、ビルド済みで使用できます SimpleDateFormatクラスで日付を必要なISO形式にフォーマットするます。

@Joachim Sauerの提案どおり

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());

3
そして、質問に示されているようにフォーマットされた文字列をどのように作成しますか?
Joachim Sauer

4
これほど単純なものにはライブラリ依存関係を追加しないでください(2行のjavaコードで実現できます)。(確かに、要件が
増えれ

1
@aioobe、それがアプリのいくつかの部分で使用されている場合は、デフォルトで移動しても問題ありませんが、残りの場合はjodatimeの方が優れています。
Jigar Joshi、

5
@aioobe jodatimeはISODateTimeFormat、ISO-8601の事前定義されたフォーマッターを備えているため、いずれの場合も優れています。
yegor256

3
@ org.life.java:ジョード時間に適切に切り替えることができる場合にのみ関連します。ジョーダタイムのこの機能だけを使用すると、それらはありません。
Joachim Sauer

20

ApacheのDateFormatUtilsには、次のcommons-lang3ような便利な定数があります。DateFormatUtils.ISO_DATETIME_FORMAT


3
より正確には、UTCでのDateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));現在の瞬間:デフォルトのタイムゾーンでの現在の瞬間:DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date()); @ yegor256について言及していただきありがとうございます。apachecommons DateFormatUtils-langを搭載しているため、日付形式を使用する価値があります。
バビニク2013

19

Jodatimeを含めたくない場合は(そのままに)

javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);

次の文字列を返します。

2012-07-10T16:02:48.440Z

これは元のリクエストとは少し異なりますが、ISO-8601のままです。



10

ジョーダタイム

更新:ジョダタイムプロジェクトは、今でメンテナンスモードへの移行を助言チームと、java.timeのクラス。Javaの6&7は、以下を参照してくださいThreeTen-バックポートのさらなるでアンドロイドに適合したプロジェクト、ThreeTenABPのプロジェクトを。

Joda-Timeライブラリを使用しています…

String output = new DateTime( DateTimeZone.UTC ).toString() ;

これはスレッドセーフです。Joda-Timeは新しい不変オブジェクトを作成しますは、既存のオブジェクトを変更するのではなく、ます。

本当に秒単位のないフォーマットを要求し、分単位に解決するつもりなら、Joda-Timeの他の多くの組み込みフォーマッターの1つを使用してください。

DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;

java.time

Java 8以降では、Joda-Timeは引き続き機能します。しかし、組み込みのjava.timeフレームワーク -Timeに取って代わりました。したがって、コードをJoda-Timeからjava.timeにできるだけ早く移行してください。

最新のソリューションについては、他の回答を参照しください。


java.timeについて

java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.DateCalendar&を、SimpleDateFormat

ジョダタイム今ではプロジェクト、メンテナンスモードでは、への移行をアドバイスjava.timeクラス。

詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。

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

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

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

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを


7

Javaバージョン7の場合

Oracleのドキュメントに従ってください:http : //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

X-ISO 8601タイムゾーンに使用されます

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

System.out.println(nowAsISO);

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);

System.out.println(finalResult);

5

ISO 8601の場合、JavaのSimpleDateFormatを次のパターンyyyy-MM-dd'T'HH:mm:ssXXXで使用できます。

サンプルコード:(使用可能なすべてのタイムゾーンのリスト)

for (String timeZone : TimeZone.getAvailableIDs())
{
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
    String formatted = dateFormat.format(new Date());
    System.out.print(formatted);

    if (formatted.endsWith("Z"))
    {
        // These time zone's have offset of '0' from GMT.
        System.out.print("\t(" + timeZone + ")");
    }

    System.out.println();
}

あなたは使うことができます:

TimeZone.getDefault()

デフォルトのvmタイムゾーン。詳細はこちら

で終わるいくつかのタイムゾーンの日付時刻に気付く場合があります'Z'。これらのタイムゾーンには、'0' GMTからの。

詳細については、こちらをご覧ください


5

私は、最も簡単な方法は、最初にインスタントに移動し、次に次のようにひもでつなぐことだと信じています。

String d = new Date().toInstant().toString();

その結果:

2017-09-08T12:56:45.331Z


4
現在の時刻が必要なDate場合は、昔ながらのオブジェクトを経由する必要はありません。ただしてくださいInstant.now().toString()DateレガシーAPIからを取得した場合、あなたのメソッドが最適です。
Ole VV

オレVVは、次のような、面倒な古い日時のクラスをコメントとしてjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeの後にJavaの8とに組み込まれたクラス。Oracleによるチュートリアル参照してください。
バジルブルク2018

5

tl; dr

他の回答のいくつかはjava.timeクラスを推奨するのに正しいですが、特定のニーズに合わせて不必要な長さを使用します。

Instant.now()                               // Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds.
       .truncatedTo( ChronoUnit.MINUTES )   // Lop off any seconds or fractional second, to get a value in whole minutes.
       .toString()                          // Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.

2018-01-23T12:34Z

Instant::toString

このjav.time.Instantクラスは、ある瞬間をUTCで表し、常にUTCで表します。

Instant instant = Instant.now() ;

instant.toString():2018-01-23T12:34:56.123456Z

Zあなたの例の文字列の末尾には2010-10-12T08:50Z「ズールー」と発音される手段UTC

あなたの望ましいフォーマットはたまたま準拠しています ISO 8601標準ます。java.timeの文字列を生成/解析するときのクラスは、デフォルトでは、これらの標準フォーマットを使用します。したがって、フォーマットパターンを指定する必要はありません。電話するだけInstant::toString上記のようにてください。

特に、秒なしの分全体または小数秒が必要な場合は、切り捨てます。ChronoUnitクラスを介して時間の単位を指定します。

Instant instant = Instant.now().truncatedTo( ChronoUnit.MINUTES ) ;
String output = instant.toString();  // Generate a `String` object in standard ISO 8601 format.

java.timeについて

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

ジョダタイム今ではプロジェクト、メンテナンスモードへの移行をアドバイスjava.timeのクラス。

詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。

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

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

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

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを


2

以下は、「now()」を呼び出しても何も実行しないように最適化されたクラス全体です。

public class Iso8601Util
{
    private static TimeZone tz = TimeZone.getTimeZone("UTC");
    private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    static
    {
        df.setTimeZone(tz);
    }

    public static String now()
    {
        return df.format(new Date());
    }
}

9
SimpleDateFormatはスレッドセーフではないため、これを静的にすると問題が発生する可能性があります。docs.oracle.com/javase/7/docs/api/java/text/...
ユハPalomäki

2
@JuhaPalomäkiが述べたように、これはスレッドセーフではありません。Java 8以降を使用している場合は、ThreadLocal.withInitialで修正できます。あなたは、Java 7以下を使用して、新しいのThreadLocalを作成してオーバーライドすることで初期値を供給している場合ThreadLocal.initialValueを
user393274

@ user393274-Java 8を使用している場合はInstantDateTimeFormatとその他の最新のスレッドセーフの代替品を使用する必要があります

SimpleDateFormatがスレッドセーフではないという問題に少し戸惑っています。2つのスレッドが同時に静的イニシャライザを実行する場合、SimpleDateFormatコンストラクタが2回呼び出されて、その1つの瞬間(最後に終了する瞬間)だけが "df"として記録されるという悪い事態は発生しません。
ギルバートピルツ2018

2
private static String getCurrentDateIso()
{
    // Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    return dateFormat.format(new Date());
}

1

それでも、joda-timeは拡張フォーマット "2015-12-09T00:22:42.930Z"のみをサポートしています。基本ではありません: "20151209T002242.930Z" ... Java SimpleDateFormatを使用してフォーマットのリストをテストした方がよい場合があります。


1

私はカレンダーとSimpleDateFormatを使用してAndroidでそれを行いました。次のメソッドは、 "GMT" TimeZoneを持つカレンダーを返します(これは世界標準のタイムゾーンです)。次に、CalendarクラスのメソッドsetTimeZone()を使用して、Calendarクラスを使用して異なるタイムゾーン間の時間を設定できます。

private static final String GMT = "GMT";
private static final String DATE_FORMAT_ISO = "yyyyMMdd'T'HHmmss";

public static Calendar isoToCalendar(final String inputDate) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(GMT));
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_ISO, Locale.US);
        dateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
        Date date = dateFormat.parse(inputDate);
        calendar.setTime(date);
    } catch (ParseException e) {
        Log.e("TAG",e.getMessage());
    }
    return calendar;
}

注意:DateクラスはTimeZoneの存在を認識していません。このため、1つの日付をデバッグすると、常に現在のタイムゾーンの日付が表示されます。


1

パフォーマンスに関心がある場合は、ISO8601形式の日付を操作する際に、標準のJavaパーサーおよびフォーマッターよりも優れたライブラリを作成しました。DatetimeProcessorの実装はスレッドセーフであり、並行マップまたは静的フィールドにキャッシュできます。

<dependency>
  <groupId>com.axibase</groupId>
  <artifactId>date-processor</artifactId>
  <version>1.0.3</version>
</dependency>
import com.axibase.date.DatetimeProcessor;
import com.axibase.date.PatternResolver;
import org.junit.Before;
import org.junit.Test;

import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class DateFormatTest {
    private Clock clock;

    @Before
    public void prepare() {
        clock = Clock.fixed(Instant.ofEpochMilli(1571285405300L), ZoneId.of("Europe/Berlin"));
    }

    @Test
    public void testIsoMillis(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10:05.300Z"));
    }

    @Test
    public void testIsoMillisLocalZone(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), clock.getZone()), is("2019-10-17T06:10:05.300+02:00"));
    }

    @Test
    public void testIsoMinutes(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("yyyy-MM-ddTHH:mmXXX");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10Z"));
    }
}

0

彼らは、日付からインスタントに移動するためのある種の簡単な方法とtoISO8601、多くの人が探していると呼ばれるメソッドを追加する必要がありました。java.util.DateからISO 8601形式への他の回答の補足として:

Instant.ofEpochMilli(date.getTime()).toString();

オートコンプリートを使用する場合は実際には表示されませんが、次のようになります java.time.Instant.toString()

ISO-8601を使用したこのインスタントの文字列表現


0
DateTimeFormatter.ISO_DATE_TIME
        .withZone(ZoneOffset.UTC)
        .format(yourDateObject.toInstant())

このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
Vishal Chhodwani

-2

これを試して、

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
        String date=sdf.format (new Date() );

ISO 8601形式の場合


2
これは間違ったタイムゾーンの日付を使用します。Carlosの回答を参照してください。
Stian Soiland-Reyes 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.