Я пытаюсь разобрать дату из строки.
Я бы хотел определить случай, когда из-за перехода на летнее время часы возвращаются назад, и время фактически «повторяется» в один и тот же день.
Например, исходя из летнего времени Великобритании, часы возвращаются на час в 2 часа ночи, 27 октября 2019 года.
Таким образом:
- 12:30 - 27.10.10 2019 г.
- Через час - 1:30 27.10.109 г.
- Через час - 1:30 27.10.2009 (по состоянию на 2 часа мы вернулись на час назад), * 1014 *
- Через час - 2:30 27 октября 2019 года.
Следовательно, «1:30 AM 27/10/2019» относится к двум разным временам. Это тот случай, который я пытаюсь определить.
Я создал следующее, но оно использует классы Date
& Calendar
и некоторые устаревшие методы. Я хотел бы сделать это, используя новую функциональность java.time
- и я надеюсь, что есть более простое решение.
public static boolean isDateRepeatedDST(final Date date, TimeZone timeZone) {
if (timeZone == null) {
// If not specified, use system default
timeZone = TimeZone.getDefault();
}
if (timeZone.useDaylightTime()) {
// Initially, add the DST offset to supplied date
// Handling the case where this is the first occurrence
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MILLISECOND, timeZone.getDSTSavings());
// And determine if they are now logically equivalent
if (date.toLocaleString().equals(calendar.getTime().toLocaleString())) {
return true;
} else {
// Then try subtracting the DST offset
// Handling the second occurrence
calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MILLISECOND, -timeZone.getDSTSavings());
if (date.toLocaleString().equals(calendar.getTime().toLocaleString())) {
return true;
}
}
}
// Otherwise
return false;
}