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

8

我正在尝试从数据库中获取一些信息,然后利用这些信息来获取一些统计数据。

我想根据小时的间隔获得统计数据,因此我创建了一个包含两个整数(hour和data)的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);

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


使用Timestamp代替Date。例如,new Timestamp(year, month, date, hour, minute, second, nano)。 - wxyz
遗憾的是,Timestamp 也已被弃用。 - Marc Rasmussen
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/


1
这是唯一的解决方法吗?看起来非常冗余。 - Marc Rasmussen
3
或者等待Java 8的新日期API http://geekmonkey.org/articles/24-a-new-date-and-time-api-for-jdk-8 - mishadoff
现在使用Yoda Time,当Java 8发布时,您将轻松切换(JSR#510和Yoda Time几乎相同)。 - halfdan

2

从数据库获取日期时间

如何从数据库获取日期时间的问题已经被提及过数百次。请搜索StackOverflow,并关注java.sql.Timestamp

为了回答您所提问题标题的主题,请继续阅读。

Joda-Time

如果使用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();

要从j.u.Date转换为Joda-Time,将Date对象传递给Joda-Time DateTime的构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接