在 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);
注意 month
和 day
都是从 1 开始的,即一月是第 1 个月。在之前的 Date/Calendar API 中,月份是从 0 开始的,即一月是第 0 个月。换句话说,如果您混合使用这两个 API,请小心。
顺便说一句,java.time
有一个预定义的 Month
枚举,它可能很方便,而不是使用几个月的整数:
LocalDate localDate = LocalDate.of(2012, Month.January, 31);
我正在编写一个 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);
注意 month
和 day
都是从 1 开始的,即一月是第 1 个月。在之前的 Date/Calendar API 中,月份是从 0 开始的,即一月是第 0 个月。换句话说,如果您混合使用这两个 API,请小心。
顺便说一句,java.time
有一个预定义的 Month
枚举,它可能很方便,而不是使用几个月的整数:
LocalDate localDate = LocalDate.of(2012, Month.January, 31);