设置和获取小时,分钟,秒的正确方法

我试图从数据库中获取一些信息,然后使用该信息来获取一些统计信息。

我想基于一个小时的间隔获得统计数据,因此我创建了一个由两个Integer数小时和数据组成的HashSet

为了获得正确的小时,​​我需要从数据库中获取时间。 因此,我需要创建某种数据/日历对象。

现在,由于Date已被弃用,我需要找到一种新的方法来设置小时数。

有谁知道我怎么能做到这一点?

到目前为止,这个解决方

 Calendar time = Calendar.getInstance(); time.setTime(new Date(2012, 11, 12, 8, 10)); int hour = time.get(Calendar.HOUR); System.out.println(hour); 

但如上所述,日期已被弃用,所以我想学习“正确”的方法。

使用java.util.Calendar

 Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 2); c.set(Calendar.HOUR_OF_DAY, 1); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); 

或者使用Joda Time http://joda-time.sourceforge.net/

从数据库获取日期时间

从数据库中获取日期时间已在数百个答案中得到解决。 请搜索StackOverflow。 专注于java.sql.Timestamp

要解决问题标题的主题,请继续阅读。

乔达时间

如果您使用Joda-Time或与Java 8捆绑的java.time包(受Joda-Time启发),则会容易得多。 与Java捆绑在一起的java.util.Date和.Calendar类是众所周知的麻烦,令人困惑和有缺陷的。

时区至关重要。 与java.util.Date不同,Joda-Time和java.time都为其日期时间对象分配时区。

下面是一些示例代码,用于显示在Joda-Time 2.5 DateTime对象上设置时间的多种方法。

 DateTimeZone zoneMontreal = DateTimeZone.forID( "America/Montreal" ); // Specify a time zone, or else the JVM's current default time zone will be assigned to your new DateTime objects. DateTime nowMontreal = DateTime.now( zoneMontreal ); // Current moment. DateTime startOfDayMontreal = nowMontreal.withTimeAtStartOfDay(); // Set time portion to first moment of the day. Usually that means 00:00:00.000 but not always. DateTime fourHoursAfterStartOfDayMontreal = startOfDayMontreal.plusHours( 4 ); // You can add or subtract hours, minutes, and so on. DateTime todayAtThreeInAfternoon = nowMontreal.withTime(15, 0, 0, 0); // Set a specific time of day. 

转换

如果您绝对需要java.util.Date对象,请从Joda-Time转换。

 java.util.Date date = startOfDayMontreal.toDate(); 

要从juDate转到Joda-Time,请将Date对象传递给Joda-Time DateTime的构造函数。