8

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

我想根据几个小时的间隔获取统计信息,因此我创建了一个HashSet由两个Integer小时和数据组成的。

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

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

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

到目前为止,此解决方案有效:

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

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

4

2 回答 2

15

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

于 2012-11-12T12:16:21.603 回答
2

从数据库中获取日期时间

从数据库获取日期时间已在数百个答案中得到解决。请搜索 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 的构造函数。

于 2014-10-20T05:54:52.423 回答