問題は、私はLocalDateTimeを対象にCalendarオブジェクトから自分のコードを変更する必要があること、です。しかし、私は最後に同じタイムスタンプを得ることはありません。最初の呼び出しでは、私は他のタイムスタンプを取得し、私はタイムスタンプを計算するために同じパラメータを使用して、次の呼び出しで、のLocalDateTimeと同じです。私は別の結果を得るなぜ私は知りません。それは私のためのロジックではありません。私は何をしたいです:私はUTCタイムスタンプを取得します。私は(夏と冬のシーズンについての重要な)ドイツ(ヨーロッパ/ベルリン)の時間でそれを設定したいです。それから私は、日(夜12時)の開始と一日の終わり(23:59)を計算します。それから私は、この回のタイムスタンプを取得したいです。
私は、スプリングブーツとのAPIを構築します。上記機能は、ばねブートからコントローラクラスによって呼び出されます。APIの開始後の最初の呼び出しは、期待される結果を計算します。しかし、すべての次の呼び出しは、他の結果を与えます。7200差常に。私はLocalDateTimeを持つ他の方法を試してみましたが、それは、カレンダーと同じタイムスタンプをgavesことはありません。
localdatetimeway:
LocalDateTime localDateTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
LocalDateTime dayStartLocal = localDateTime.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
ZonedDateTime startZonedDateTime = dayStartLocal.atZone(ZoneId.systemDefault());
long dayStartTimeStamp = startZonedDateTime.toInstant().getEpochSecond();
LocalDateTime dayEndLocal = localDateTime.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999);
ZonedDateTime endZonedDateTime = dayEndLocal.atZone(ZoneId.systemDefault());
long dayEndTimeStamp = endZonedDateTime.toInstant().getEpochSecond();
CalendarWay:
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(timestamp*1000);
cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
long dayStartTimeStamp = calendar.getTimeInMillis()/1000L;
cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
cal.set(Calendar.MILLISECOND,999);
long dayEndTimeStamp = calendar.getTimeInMillis()/1000L;
私はのparamタイムスタンプ1536933600.結果1536876000と1536962399.で欲しいしかし、私はのLocalDateTime方法1536883200と1536969599により、最初の要求の後に取得します。
あなたは、あなたのために、システムのデフォルトのゾーンを使用しているjava.time
ため、コードとヨーロッパ/ベルリンゾーンCalendar
コード。7200
最も可能性の高いシステムのタイムゾーンとヨーロッパ/ベルリン(2時間)の間の差です。
すべてを交換しZoneId.systemDefault()
てZoneId.of("Europe/Berlin")
、あなたは両方のバージョンで同じ値を取得します。
timestamp = 1536933600
dayStartTimeStamp = 1536876000
dayEndTimeStamp = 1536962399