現在の日付から開始して2016年10月10日の終わりになる時間と分が欲しい
package com.mkyong.date;
import Java.text.SimpleDateFormat;
import Java.util.Date;
public class DateDifferentExample
{
public static void main(String[] args)
{
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
System.out.println(dateFormat.format(date));
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
結果 :
2016/08/15 18:54:03
2016/08/15 18:54:03
1097 Days1 Hours 1 Minute 50 Second
My want to result for example :
100 days 5 hours 2 minutes
Javaの最も古いバージョンにバンドルされている厄介な古いレガシー日時クラスを使用しています。代わりにJava.timeクラスを使用してください。
入力文字列は、ほぼ標準のISO8601形式です。中央のスペースをT
に置き換えます。 Java.timeクラスは、デフォルトでISO8601形式を使用して文字列を解析/生成します。したがって、フォーマットパターンを指定する必要はありません。
String startInput = "01/14/2012 09:29:58".replace( " " , "T" );
String stopInput = "01/15/2012 10:31:48".replace( " " , "T" );
LocalDateTime
入力には、UTCからのオフセットまたはタイムゾーンに関する情報がありません。したがって、LocalDateTime
オブジェクトとして解析します。
LocalDateTime startLdt = LocalDateTime.parse( startInput );
LocalDateTime stopLdt = LocalDateTime.parse( stopInput );
これらのタイプをさらに処理すると、夏時間(DST)などの異常を無視して、一般的な24時間の日に基づいた結果が得られます。
このデータのコンテキストが特定のタイムゾーンであることがわかっている場合は、ゾーンを適用してZonedDateTime
を取得します。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime start = startLdt.atZone( zoneId );
ZonedDateTime stop = stopLdt.atZone( zoneId );
現在の瞬間を開始または停止にしたい場合は、now
を呼び出します。 JVMの現在のデフォルトのタイムゾーンに依存するのではなく、目的の/予想されるタイムゾーンを渡します。
ZonedDateTime now = ZonedDateTime.now( zoneId );
Duration
クラスは、時間のスパンを合計秒数に加えて、ナノ秒単位の秒単位で表します。
Duration duration = Duration.between( start , stop );
奇妙なことに、Java 8では、このクラスには、この期間を構成する日数、時間などを取得するメソッドがありません。Java 9 to…Part
メソッドを追加します 。
long days = duration.toDaysPart();
int hours = duration.toHoursPart();
int minutes = duration.toMinutesPart();
Java 9までは、自分で計算を行うことができます。
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、Java.util.Date
、.Calendar
、Java.text.SimpleDateFormat
などの古い厄介な日時クラスに取って代わります。
Joda-Time プロジェクトは現在 maintenance mode であり、Java.timeへの移行を推奨しています。
詳細については、 Oracleチュートリアル を参照してください。そして、StackOverflowで多くの例と説明を検索してください。
Java.time機能の多くはJava 6&7 in ThreeTen-Backport にバックポートされ、さらに Android in-に適合されます) ThreeTenABP 。
ThreeTen-Extra プロジェクトは、Java.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。ここには、Interval
、YearWeek
、YearQuarter
などの便利なクラスがあります。
public final void set(int year、int month、int date)-Calendarクラスのこのメソッドを使用して日付を設定できます。
public final void set(int year、int month、int date、int hourOfDay、int minutes、int second)時間の設定にも使用できます。
Calendar.getInstance()デフォルトで現在の日付と時刻を設定します。`