1

JDK 或 Guava 中是否有一个类来表示一天中的一个小时,但不一定是特定日期的特定小时?如果不是,为什么?

4

3 回答 3

1

在 JDK 1.3-1.7 中,答案是否定的。一天中的特定时间比日期更容易计算,因为您不必处理闰年、闰月等令人头疼的事情。一个简单的整数就足够了。当您需要使用 SimpleDateFormatter 或其他方式将时间转换为语言环境字符串时,您可以简单地将时间转换为日期,只需忽略日期部分:

int time = 8 * 60 + 34; // 8:34 am
Date date = new Date(60000L * time);

将时区重置为 +0,并将日期传递给格式化程序:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+0"));
sdf.format(date);
于 2011-07-12T00:58:35.237 回答
1

您可以简单地将 a 包装byte到一个类中,并且每当当前小时在您的increment()(或适当的名称)方法中超过 23 时,将值设置byte为 0,并且每当值在您的decrement()(或适当的名称)方法中低于 0 时,将 的值设置byte为 23。

于 2011-07-12T01:02:30.663 回答
0

据我所知,没有一个特定的类表示Hour(在 JDK 或 Guava 中),但是有一些易于使用的类可以从特定的时间实例中获取小时数(这是我假设你所追求的)问题)。

正如 Paŭlo Ebermann 提到的,您可以使用 JODA-Time,但那是一个外部库。在 JDK 中有一个名为 的类Calendar,它有很多有用的方法。

要获取long代表当前时间的小时,您可以这样做:

Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int hour = c.get(Calendar.HOUR); //returns 0-11
int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //returns 0-23
于 2011-07-12T00:39:48.613 回答