从当前格林尼治标准时间(GMT)到格林尼治标准时间9PM为止的时间

时间:2019-07-16 20:26:58

标签: java time jodatime

我每分钟运行一次任务,我想打印出当前GMT时间与9PM GMT之间的时差,我希望它一直运行,因此一旦达到9PM gmt,它将重置为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) {

所以我的问题是我应该如何从现在开始到格林尼治标准时间9PM?并很好地格式化IE; 16小时15分4秒?

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您至少使用Java 8,我会使用Java的java.time库方法而不是日历,因为它们更加友好,并且更容易因疏忽而使用错误。

// 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);

答案 1 :(得分:1)

使用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