Java 为对象创建特定的时间戳?

Java 为对象创建特定的时间戳?,java,oop,time,Java,Oop,Time,我根本不想用现在的时间。我知道java UTIL的日历和日期,但我不确定如何创建不依赖于当前时间的自己的时间戳。例如,每个对象都有一个hh:mm:ss格式的到达时间变量。但我不知道怎么做。我必须创建我自己的类吗?这还不是很清楚,但我想你想要的是这样的东西: public class MyObject { private static final DateTimeFormatter ARRIVAL_TIME_FORMATTER = DateTimeFormatte

我根本不想用现在的时间。我知道java UTIL的日历和日期,但我不确定如何创建不依赖于当前时间的自己的时间戳。例如,每个对象都有一个hh:mm:ss格式的到达时间变量。但我不知道怎么做。我必须创建我自己的类吗?

这还不是很清楚,但我想你想要的是这样的东西:

public class MyObject {

    private static final DateTimeFormatter ARRIVAL_TIME_FORMATTER
            = DateTimeFormatter.ofPattern("HH:mm:ss");

    // Some instance variables
    private LocalTime arrivalTime;

    public MyObject(LocalTime arrivalTime) {
        this.arrivalTime = arrivalTime;
    }

    public String getFormattedArrivalTime() {
        return arrivalTime.format(ARRIVAL_TIME_FORMATTER);
    }

}
正如在评论中所说的,使用LocalTime作为一天中的时间。在对象中存储到达时间时,不要担心格式问题。仅在需要显示时对其进行格式化。LocalTime.of创建与当前时间不相关的LocalTime。有些重载版本也需要几秒钟的时间

所以,不要创建自己的时间戳类。使用LocalTime,或者根据需要使用java.time(现代java日期和时间API)中的其他类

让我们看一个使用上述MyObject类的简单示例:

输出:

物体于23:45:00到达

在输出中,只有时间按照您的要求格式化为hh:mm:ss

编辑:LocalTime的精度为纳秒。Basil Bourque的评论是正确的,即如果您知道不希望存储比整秒更精确的精度,则很容易截断传入值:

    public MyObject(LocalTime arrivalTime) {
        this.arrivalTime = arrivalTime.truncatedTo(ChronoUnit.SECONDS);
    }
一方面,我不愿像这样扔掉信息,而时间戳往往得益于精确性。另一方面,如果你的对象存储了一小部分没有人看到的秒,这也可能会让人困惑。你得自己决定

链接

解释如何使用java.time。 看看更新的java.time API。你的问题的答案将在很大程度上取决于你想要实现什么。如果您需要计算时间之间的差异,或者以某种特定的方式对时间进行排序,那么最好使用java.time API,因为该功能已经存在。我是否必须创建自己的类?是的,至少您需要一个定制的工厂类来生成和分配时间戳。然而,实际的时间戳对象可以是JDK提供的类型,如LocalTime,也可以是您自己创建的类,具体取决于您的需要。
    public MyObject(LocalTime arrivalTime) {
        this.arrivalTime = arrivalTime.truncatedTo(ChronoUnit.SECONDS);
    }