52

次のようなWebサービスから返された日付/時刻を含む標準のISO8601形式の文字列があります。

String dtStart = "2010-10-15T09:27:37Z"

これをTimeやDateなどのオブジェクトに取り込むにはどうすればよいですか?最初は別の形式で出力したいのですが、後で他のことを行う必要があります(つまり、別の形式で使用する可能性があります)。

乾杯

4

5 に答える 5

128
String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {  
    e.printStackTrace();  
}

これはあなたが探しているものです。この問題に関する既存の投稿があります。

于 2010-10-15T10:44:07.307 に答える
7

この質問は2010年に行われたもので、当時はSimpleDateFormatJoda-Timeのどちらかが使用すべきツールであることが正しかったです。かなり前のことです。今日使用する

    Instant iStart = Instant.parse(dtStart);

はい、これは簡単です。文字列はISO8601形式であり、java.time最新のJava日付および時刻APIのクラスは、明示的なフォーマッターなしでISO8601を解析します。Instantそれらのクラスの1つにすぎません。

編集:質問:Android API 26が必要です-古いバージョンのサポートはどうですか?

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

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

リンク

于 2018-05-23T06:57:21.960 に答える
2

JavaのSimpleDateFormat解析メソッドを使用するか、JodaTimeのDateTimeFormatを使用してDateTimeFormatterを作成し、それに応じてDateTimeオブジェクトに解析することができます。

于 2010-10-15T10:31:48.730 に答える
0

currentを使用する場合java.time、またはthreetenbp単に次のように解析する場合:

ZonedDateTime dt = ZonedDateTime.parse(dtStart);

これで、年、月、時間などの日付と時刻の値にアクセスできます。

于 2020-02-23T18:41:37.773 に答える
-1

列で区切られた値を指定して時間差を計算するとします。
finish- > 15:24:04 start-
> 09:27:37 DateSimpleDateFormat
を使用せずに、次のようにしました。

String tStart = "09:27:37";
String tFinish = "15:24:04";

String[] sTimeHourMinSec = tStart.split(":");
int sHour = Integer.valueOf(sTimeHourMinSec[0]);
int sMin = Integer.valueOf(sTimeHourMinSec[1]);
int sSec = Integer.valueOf(sTimeHourMinSec[2]);

String[] fTimeHourMinSec = tFinish.split(":");
int fHour = Integer.valueOf(fTimeHourMinSec[0]);
int fMin = Integer.valueOf(fTimeHourMinSec[1]);
int fSec = Integer.valueOf(fTimeHourMinSec[2]);

int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec);
int diffHours = diffTotSec / 3600;
int diffMins = (diffTotSec % 3600) / 60;
int diffSecs = (diffTotSec % 3600) % 60;

System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");
于 2018-05-23T05:19:48.530 に答える