在 java 中使用日期,并且仅使用日期

Using date, and date only, in java

我正在编写一个 java 程序,我已经被 Java 编程的所有日期、日期时间等部分卡住了很长一段时间。

我想要的是只有一个 DATE 对象。我有一个 class:

Deployment.java

public class Deployment {

    int id;
    LocalDate deviceDeploymentDate; //I'm unsure what this should be

    public Deployment(int id, LocalDate deviceDeploymentDate) {
        this.id = id;
        this.deviceDeploymentDate = deviceDeploymentDate;
    }

    public Deployment() {
    
    }

    public LocalDate getDeviceDeploymentDate() {
        return deviceDeploymentDate;
    }

    public void setDeviceDeploymentDate(LocalDate date) {
        this.deviceDeploymentDate = date;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

我的 GUI 中有一个日期选择器。

从这个日期选择器中,我可以获取字符串格式的日期(如果需要,还可以将其更改为整数年、整数月和整数日期)。由此我想在我的 Deployment 对象中存储某种日期,我根本不希望时间成为其中的一部分。

问题

我应该使用哪种数据类型来执行此操作?我该怎么做?

其他

我很快查看了 Joda Time,但无法从我可以从日期选择器获得的字符串或整数创建 LocalDate / DateTime 类型。

您可以继续使用 LocalDate(根据 David 的评论)并使用 Joda Time 中的 DateTimeFormatter,如下所示将 String 转换为 LocalDate。

final DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinputString);

Joda-Time 很棒,但自从 Java 8 及更高版本中的 Date-Time API 以来几乎不需要。 Joda-Time 背后的团队甚至建议 Java 8 或更高版本的用户使用标准 API:

Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project.

鉴于此,您应该使用标准 API、java.time 中的 LocalDate。您的 Deployment class 看起来就像现在一样,只需确保导入正确的包 (java.time.LocalDate)。

由于您可以访问字段(年、月和日),因此可以使用 API:

中的 of() 方法之一
LocalDate.of(year, month, day);

注意 monthday 都是从 1 开始的,即一月是第 1 个月。在之前的 Date/Calendar API 中,月份是从 0 开始的,即一月是第 0 个月。换句话说,如果您混合使用这两个 API,请小心。

顺便说一句,java.time 有一个预定义的 Month 枚举,它可能很方便,而不是使用几个月的整数:

LocalDate localDate = LocalDate.of(2012, Month.January, 31);