我正在编写一个java程序,并且在Java编程的所有日期,日期时间等方面都遇到了一段时间。
我想要的只是一个DATE对象。我有一节课:
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中有一个日期选择器。
从这个日期选择器中,我可以以字符串格式获取日期(如果需要,也可以将其更改为int year,int month和int date)。从这里我想在我的Deployment对象中存储某种DATE,我不希望时间成为这一部分的一部分。
我应该使用哪种数据类型来执行此操作?我该怎么办?
我很快就看了Joda Time,但是无法从字符串或整数中创建一个LocalDate / DateTime类型,我可以从日期选择器中获取。
答案 0 :(得分:3)
Joda-Time很棒,但自Java 8及更高版本的Date-Time API以来,大多数都不需要。 Joda-Time背后的团队甚至建议Java 8或更高版本的用户使用标准API:
请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - 这是JDK的核心部分,它取代了这个项目。
鉴于此,您应该使用标准API java.time
中的LocalDate
。您的Deployment
类看起来就像现在一样,只需确保导入正确的包(java.time.LocalDate
)。
由于您可以访问字段(年,月和日),因此您可以使用API中的of()
方法之一:
LocalDate.of(year, month, day);
请注意,month
和day
以1开头,即1月是1月。在之前的日期/日历API中,月计数从0开始,即1月是0月。换句话说,如果混合两个API,请小心。
顺便说一下,java.time
有一个预定义的Month
枚举,可能很方便,而不是几个月使用整数:
LocalDate localDate = LocalDate.of(2012, Month.January, 31);
答案 1 :(得分:2)
您可以继续使用LocalDate(根据David的评论)并使用Joda Time的DateTimeFormatter,如下所示将String转换为LocalDate。
final DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinputString);