Dateオブジェクトにn時間を追加するにはどうすればよいですか?StackOverflowで日を使用する別の例を見つけましたが、それでも時間でそれを行う方法がわかりません。
Dateオブジェクトにn時間を追加するにはどうすればよいですか?StackOverflowで日を使用する別の例を見つけましたが、それでも時間でそれを行う方法がわかりません。
回答:
Calendarクラスを確認してください。それは持っているadd
時間の操作を可能にする方法(およびいくつかの他を)。このようなものが動作するはずです。
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date()); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
cal.getTime(); // returns new date object, one hour in the future
詳細については、APIを確認してください。
Calendar.add()
はそれを自動的に処理します。
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8&9のJavaを参照してくださいに組み込まれたクラスのチュートリアル Oracleで。
Apache Commons / Langを使用している場合は、次のコマンドを使用して1つの手順で実行できますDateUtils.addHours()
。
Date newDate = DateUtils.addHours(oldDate, 3);
(元のオブジェクトは変更されていません)
DateUtils.addHours(oldDate, -1);
myJavaUtilDate.toInstant()
.plusHours( 8 )
または…
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our `Instant`.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.
Java 8以降に組み込まれたjava.timeフレームワークは、古いJava.util.Date/.Calendarクラスに取って代わります。それらの古いクラスは悪名高いほど厄介です。それらを避けてください。
toInstant
java.util.Dateに新しく追加されたメソッドを使用して、古い型から新しいjava.time型に変換します。アンはInstant
でタイムライン上の瞬間であるUTCの解像度を持つナノ秒。
Instant instant = myUtilDate.toInstant();
などをInstant
渡すことで、それに時間を追加できます。TemporalAmount
Duration
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
その日時を読み取るには、を呼び出して、標準ISO 8601形式の文字列を生成しますtoString
。
String output = instantHourLater.toString();
ある地域の実時間のレンズを通してその瞬間を見たいと思うかもしれません。をInstant
作成して、を希望のタイムゾーンに調整しますZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
または、電話plusHours
をかけて時間数を追加することもできます。ゾーニングされていると、夏時間(DST)とその他の異常がユーザーに代わって処理されます。
ZonedDateTime later = zdt.plusHours( 8 );
java.util.Date
およびを含む古い日時クラスの使用は避けてください.Calendar
。ただしjava.util.Date
、java.timeタイプ用にまだ更新されていないクラスとの相互運用性が本当に必要な場合は、ZonedDateTime
via から変換してくださいInstant
。古いクラスに追加された新しいメソッドは、java.time型との間の変換を容易にします。
java.util.Date date = java.util.Date.from( later.toInstant() );
変換の詳細については、質問への回答、java.util.Dateを「java.time」タイプに変換するを参照してください。。
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.Date
、Calendar
&を、SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
java.timeオブジェクトをデータベースと直接交換することができます。JDBC 4.2以降に準拠したJDBCドライバーを使用します。文字列もクラスも必要ありません。java.sql.*
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTime
なく、のために行くべきLocalDateTime
です。「ローカル」とは、特定の場所に関連付けられておらず、タイムラインにも関連付けられていないことを意味します。「2015年12月25日の真夜中にクリスマスが始まる」のように、さまざまなタイムゾーンで異なる瞬間があります。特定のタイムゾーンを適用してタイムライン上の特定の瞬間を取得するまでは意味がありません。さらに、タイムゾーンがない場合、夏時間(DST)およびその他の異常は、LocalDateTimeのこのような使用で処理されません。比較して私の答えを見てください。
java.util.Date
要求者たちを求めていたように、オブジェクトをZonedDateTime.toInstant()
してDate.from()
、ここで説明したようstackoverflow.com/a/32274725/5661065
新しいjava.util.concurrent.TimeUnitクラスを使用すると、次のようにすることができます
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
何かのようなもの:
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8&9のJavaを参照してくださいに組み込まれたクラスのチュートリアル Oracleで。
これは、Date
オブジェクトが日時形式の場合の別のコードです。このコードの優れた点は、時間数を増やすと、それに応じて日付も更新されることです。
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
catch (ParseException e)
{
e.printStackTrace();
}
System.out.println("This is the Actual Date:"+myDateTime);
Calendar cal = new GregorianCalendar();
cal.setTime(myDateTime);
//Adding 21 Hours to your Date
cal.add(Calendar.HOUR_OF_DAY, 21);
System.out.println("This is Hours Added Date:"+cal.getTime());
これが出力です:
This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
を使用する場合はjava.time
、ISO 8601形式の期間を追加する方法を次に示します。
import java.time.Duration;
import java.time.LocalDateTime;
...
LocalDateTime yourDate = ...
...
// Adds 1 hour to your date.
yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.
Duration.parse(iso8601duration)
興味深いですが、感謝しますが、で演算子+
を使用することはできませんLocalDateTime
。編集したいかもしれません。しかし、.plus(...)
機能します。
Date
、UTCの特定の瞬間を表すオブジェクトに関するものです。の使用はLocalDateTime
質問に対処できません。LocalDateTime
タイムゾーンやUTCからのオフセットの概念がないため、瞬間を表すことができません。この問題の間違ったクラス。参照してください。インスタントとのLocalDateTimeの違いは何ですか?
Date
オブジェクトは非推奨です。タイムゾーンに関しては質問が曖昧なので、私の答えはそのままです。さらに、あなただけ入れ替えることができますLocalDateTime
のためにZonedDateTime
。
あなたはJoda DateTime APIでそれを行うことができます
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Java 8クラスを使用する。以下のように非常に簡単に日付と時刻を操作できます。
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Date
、UTCの特定の瞬間を表すオブジェクトに関するものです。の使用はLocalDateTime
質問に対処できません。LocalDateTime
時間帯やオフセットからのオフセットの概念が欠けているため、瞬間を表すことはできません。この問題の間違ったクラス。参照してください。インスタントとのLocalDateTimeの違いは何ですか?
Java 8のLocalDateTimeクラスを使用できます。例:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Date
、UTCの特定の瞬間を表すオブジェクトに関するものです。の使用はLocalDateTime
質問に対処できません。LocalDateTime
時間帯やオフセットからのオフセットの概念が欠けているため、瞬間を表すことはできません。この問題の間違ったクラス。参照してください。インスタントとのLocalDateTimeの違いは何ですか?
この方法を使用できます。理解と実装が簡単です。
public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
calendar.add(Calendar.MINUTE, nombreMinute);
calendar.add(Calendar.SECOND, nombreSeconde);
return calendar.getTime();
}