哪个对象最适合做时间操作

时间:2015-11-22 03:22:37

标签: java datetime

我的任务是写一个记录飞行数据的程序,所以我决定制作一个飞行物。

在此对象中是出发时间和到达时间。我不确定哪个对象最适合用于此,我希望将时间存储在24小时(hh:mm)时间内,并能够以小时和分钟计算飞行持续时间(hh:mm) ,我看过文档,我遇到了3个不同的时间对象。

1 java.util.Date

  • 无用,因为它包含太多的信息,如年份和月份,这是制作图表的一个非常基本的程序,大多数数据操作都使用long

2 java.sql.Date

  • 不包含以我想要的相同比例处理时间的构造函数,并使用long进行操作。

3 java.sql.Time

  • 似乎有正确的构造函数,它是“已弃用”。而且我确定我在某个地方读到它意味着在以后的版本中不再支持它并且使用它们是不好的做法。这让我再次使用Time(long)构造函数。对我来说不是很有用,因为这意味着我需要在创造时间之前将每次转换为多头。

TL; DR:

是否有任何库可以创建一个看起来像

的时间
(pseudocode):
Object time = new Constructor(23,11) 

这不是“弃用”所以我不必先转换为long。或者,我是否必须自己制作Object

3 个答案:

答案 0 :(得分:5)

顾名思义,java.sql旨在与SQL数据库连接,在其他情况下您可能不应该使用它。

如果您可以使用java 8,我建议您使用java.time.LocalTime。通过这门课程,您不必担心日期信息和时区。您可以非常轻松地创建实例:

LocalTime.of(17, 18); // the train I took home today
LocalTime.parse("10:15:30"); // From a String
     

摘自Java SE 8 Date and Time

如果你不能,你应该使用java.util.Date;但是,没有什么可以禁止你对它进行子类化,以便在不考虑日期的情况下更容易操纵时间。

答案 1 :(得分:5)

Java 8 +中的

java.time

在Java 8+中,您可以使用java.time.Duration(通常也可能使用java.time)。像,

public static void main(String[] args) {
    Duration d = Duration.ofHours(23).plusMinutes(11);
    System.out.println(d);
}

Java的早期版本中的Joda-Time

如果您未使用Java 8+,则可以使用Joda-Time

答案 2 :(得分:2)

如果你想要操纵时间,而不是重新发明一些轮子,你应该使用完整的实现,例如Java 8中的java.time.LocalTime或joda-time:http://www.joda.org/joda-time/。< / p>

您的存储年,月和日信息有什么危害?在我看来,你的蠢事总会发生在特定的时间点。无论如何,jode-time有一个没有日期概念的LocalTime类。我只是想知道你将如何处理从一天开始到另一天结束的过滤器。