私はこの日付オブジェクトを持っています:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
d1の値はFri Jan 07 17:40:00 PKT 2011
現在、上記の日付に10分を追加しようとしています。
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
newTime
の値は2011-50-07 17:50
に変わりますが、07-01-2011 17:50
でなければなりません。
分を正しく追加しますが、月も変わります。理由はわかりません!
問題は、mm
を使用していることです。 MM
を使用する必要があります。 MM
は月、mm
は分を表します。 yyyy-MM-dd HH:mm
で試してください
その他のアプローチ:
これと同じくらい簡単にできます(他のオプションは joda-time を使用することです)
static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs
Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
org.Apache.commons.lang3.timeパッケージのDateUtilsクラスを使用できます
int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
@Pangeaの答えを実装するための便利な方法:
/*
* Convenience method to add a specified number of minutes to a Date object
* From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
* @param minutes The number of minutes to add
* @param beforeTime The time that will have minutes added to it
* @return A date object with the specified number of minutes added to it
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
long curTimeInMs = beforeTime.getTime();
Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
return afterAddingMins;
}
これは間違って指定されています:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
月の代わりに分を使用しています(MM)
依存関係を回避するために、次のようにJava.util.Calendarを使用できます。
Calendar now = Calendar.getInstance();
now.add(Calendar.MINUTE, 10);
Date teenMinutesFromNow = now.getTime();
Java 8には新しいAPIがあります:
LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
日時の作業に優れたJava.timeクラスを使用します。これらのクラスは、Java.util.Date
やJava.util.Calendar
などの厄介な古い日時クラスに取って代わります。
Java.timeクラスは、日付/時刻値の文字列を解析/生成するために、デフォルトで標準の ISO 8601 形式を使用します。入力文字列を準拠させるには、中央のSPACEをT
に置き換えます。
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
タイムゾーンまたはUTCからのオフセットに関する情報がないため、入力文字列をLocalDateTime
として解析します。
LocalDateTime ldt = LocalDateTime.parse( inputModified );
10分追加します。
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString():2016-01-23T12:34
ldtLater.toString():2016-01-23T12:44
IdeOne.comのライブコード を参照してください。
LocalDateTime
にはタイムゾーンがないため、notはタイムライン上のポイントを表します。タイムゾーンを適用して、実際の瞬間に変換します。 適切なタイムゾーン名 をcontinent/region
の形式で指定します。たとえば、 America/Montreal
、 Africa/Casablanca
、Pacific/Auckland
、または Asia/Karachi
=。 EST
、IST
、またはPKT
などの3〜4文字の略語を使用しないでください。not真のタイムゾーンであり、標準化されておらず、一意でもありません(!)。
ZonedDateTime
この値の目的のタイムゾーンがわかっている場合は、ZoneId
を適用してZonedDateTime
を取得します。
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString():2016-01-23T12:44 + 05:00 [アジア/カラチ]
タイムゾーンを追加する前に10分追加するか、追加するかを検討します。 wall-clock time をシフトする夏時間(DST)などの異常により、非常に異なる結果が得られる場合があります。
ゾーンを追加する前または後に10分間を追加するかどうかは、ビジネスシナリオとルールの意味によって異なります。
ヒント:タイムライン上の特定の瞬間を意図している場合、常にタイムゾーン情報を保持します。入力データと同様に、その情報を失わないでください。値12:34
は、パキスタンで正午、フランスで正午、またはケベックで正午ですか?パキスタンで正午を意味する場合は、少なくともUTCからのオフセット(+05:00
)、さらにはタイムゾーンの名前(Asia/Karachi
)を含めることでそう言います。
Instant
UTC のレンズを通して見たのと同じ瞬間が必要な場合は、Instant
を抽出します。 Instant
クラスは UTC のタイムライン上の瞬間を表します nanoseconds (10進数の最大9桁)分数)。
Instant instant = zdt.toInstant();
面倒な古い日時クラスは可能な限り避けてください。ただし、必要な場合は変換できます。古いクラスに追加された新しいメソッドを呼び出します。
Java.util.Date utilDate = Java.util.Date.from( instant );
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、厄介な古い legacyJava.util.Date
、 Calendar
、& SimpleDateFormat
などの日時クラスに取って代わります。
Joda-Time プロジェクトは、現在 メンテナンスモード であり、Java.timeへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。指定は JSR 31 です。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがあります。
SimpleDateFormatのパターンにエラーがあります。そのはず
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
この形式を使用し、
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
mmは分、MMは月
日付を解析したら、このユーティリティ関数を使用して、時間、分、または秒を追加します。
public class DateTimeUtils {
private static final long ONE_HOUR_IN_MS = 3600000;
private static final long ONE_MIN_IN_MS = 60000;
private static final long ONE_SEC_IN_MS = 1000;
public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
long minsToAddInMs = mins * ONE_MIN_IN_MS;
long secsToAddInMs = secs * ONE_SEC_IN_MS;
return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
}
}
長い期間を追加するときは注意してください。1日は常に24時間ではありません(夏時間の調整、うるう秒など)。そのためには Calendar
をお勧めします。
私のために働く
//import
import org.Apache.commons.lang.time.DateUtils
...
//Added and removed minutes to increase current range dates
Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)