Я запускаю задачу каждую минуту, я хочу распечатать разницу между текущим временем по Гринвичу и 9 вечера по Гринвичу, я хочу, чтобы это выполнялось все время, поэтому, как только оно достигнет 9 вечера по Гринвичу, оно будет сброшено до 24 часов, так что это выглядит в 9 вечера по Гринвичу следующего дня.
У меня установлена библиотека jodatime.
Я пробовал, это получает текущее время по Гринвичу?
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
TimeZone.setDefault(gmtTimeZone);
Calendar calendar = Calendar.getInstance(gmtTimeZone);
Теперь, чтобы получить 9 часов, я могу получить час?
if (calendar.get(Calendar.HOUR_OF_DAY); == 9) {
поэтому мой вопрос в том, как мне добраться до 9 вечера по Гринвичу? и красиво отформатируйте его в IE; 16 часов 15 минут и 4 секунды?
Спасибо.
Привет! Это может помочь вам сформулировать важный вопрос. stackoverflow.com/help/как спросить Так мы сможем предоставить более качественную обратную связь!
Обновленный пост с тем, что у меня уже есть. @AbhishekGarg
У вас есть особое желание использовать Joda-Time? Спрашиваю, потому что «Joda-Time считается в значительной степени «законченным» проектом. Серьезных улучшений не планируется». (цитата из домашняя страница). Они рекомендуют: «Если вы используете Java SE 8, перейдите на java.time
(JSR-310)». Вы можете, если используете Java 6 или 7.
Используя Joda-Time, вы можете получить время до 9 вечера по Гринвичу, используя следующий вспомогательный метод:
import org.joda.time.DateTimeZone;
import org.joda.time.LocalTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormat;
public static String timeUntil(int hourOfDay, int minuteOfHour) {
Period period = Period.fieldDifference(LocalTime.now(DateTimeZone.UTC),
new LocalTime(hourOfDay, minuteOfHour))
.plusHours(24).normalizedStandard().withDays(0).withMillis(0);
StringBuffer buf = new StringBuffer();
PeriodFormat.wordBased(Locale.US).printTo(buf, period);
return buf.toString();
}
Тестовое задание
System.out.println(timeUntil(21, 0)); // until 9 pm GMT
System.out.println(timeUntil(22, 0)); // until 10 pm GMT
Пример вывода
23 hours, 31 minutes and 48 seconds
31 minutes and 48 seconds
Обратите внимание, что эта логика не обрабатывает летнее время, что не является проблемой для UTC/GMT, но может быть, если вы перейдете на использование другого часового пояса.
Я бы использовал методы библиотеки Java java.time
вместо календаря, если вы используете по крайней мере Java 8. Они намного удобнее, и их сложнее непреднамеренно использовать неправильно.
// in a 24 hour clock, 9PM = 21:00
final int ninePM = 21;
OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC);
OffsetDateTime next9PM;
if (now.getHour() >= ninePM) {
next9PM = now.plus(1, ChronoUnit.DAYS)
.withHour(ninePM)
.truncatedTo(ChronoUnit.HOURS);
} else {
next9PM = now.withHour(ninePM)
.truncatedTo(ChronoUnit.HOURS);
}
return Duration.between(now, next9PM);
Спасибо за показ современного решения. Я сделал пару простых тестов: это работает.
Будет здорово, если вы также упомянете, что вы пробовали.