次のようなWebサービスから返された日付/時刻を含む標準のISO8601形式の文字列があります。
String dtStart = "2010-10-15T09:27:37Z"
これをTimeやDateなどのオブジェクトに取り込むにはどうすればよいですか?最初は別の形式で出力したいのですが、後で他のことを行う必要があります(つまり、別の形式で使用する可能性があります)。
乾杯
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年に行われたもので、当時はSimpleDateFormatJoda-Timeのどちらかが使用すべきツールであることが正しかったです。かなり前のことです。今日使用する
Instant iStart = Instant.parse(dtStart);
はい、これは簡単です。文字列はISO8601形式であり、java.time最新のJava日付および時刻APIのクラスは、明示的なフォーマッターなしでISO8601を解析します。Instantそれらのクラスの1つにすぎません。
はい、java.time古いAndroidデバイスと新しいAndroidデバイスでうまく機能します。少なくともJava6が必要です。
org.threeten.bpまた、サブパッケージを使用して日付と時刻のクラスをインポートするようにしてください。java.time。java.time最初に説明されたJavaSpecificationRequest (JSR)310 。java.timeJava 6および7へのバックポート(JSR-310の場合はThreeTen)。JavaのSimpleDateFormat解析メソッドを使用するか、JodaTimeのDateTimeFormatを使用してDateTimeFormatterを作成し、それに応じてDateTimeオブジェクトに解析することができます。
currentを使用する場合java.time、またはthreetenbp単に次のように解析する場合:
ZonedDateTime dt = ZonedDateTime.parse(dtStart);
これで、年、月、時間などの日付と時刻の値にアクセスできます。
列で区切られた値を指定して時間差を計算するとします。
finish- > 15:24:04 start-
> 09:27:37 DateとSimpleDateFormat
を使用せずに、次のようにしました。
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");