在java中使用日期和仅日期

在java中使用日期和仅日期,java,date,datetime,datepicker,jodatime,Java,Date,Datetime,Datepicker,Jodatime,我正在编写一个java程序,我已经被java编程的所有日期、日期时间等部分困扰了相当长一段时间 我想要的只是一个日期对象。我有一门课: Deployment.java 我的GUI中有一个日期选择器 从这个日期选择器中,我可以获得字符串格式的日期(如果需要,还可以将其更改为int year、int month和int Date)。因此,我希望在部署对象中存储某种日期,而我根本不希望时间成为其中的一部分 问题: 我应该使用哪种数据类型来执行此操作?我该怎么办 杂项 我很快就了解了Joda Time

我正在编写一个java程序,我已经被java编程的所有日期、日期时间等部分困扰了相当长一段时间

我想要的只是一个日期对象。我有一门课:

Deployment.java 我的GUI中有一个日期选择器

从这个日期选择器中,我可以获得字符串格式的日期(如果需要,还可以将其更改为int year、int month和int Date)。因此,我希望在部署对象中存储某种日期,而我根本不希望时间成为其中的一部分

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

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

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

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

Joda Time非常好,但由于Java8及更高版本中的日期时间API,因此基本上不需要Joda Time。支持Java 8或更高版本的团队甚至建议用户使用标准API:

注意,从JavaSE8开始,用户被要求迁移到Java.time(JSR-310)——JDK的核心部分,它取代了这个项目

鉴于此,您应该使用标准API中的
java.time
。您的
部署
类可以像现在一样,只需确保导入正确的包(
java.time.LocalDate

由于您可以访问字段(年、月和日),因此可以使用API中的一种方法:

LocalDate.of(year, month, day);
请注意,
month
day
以1开头,即一月是第一个月。在以前的日期/日历API中,月份计数从0开始,即一月是0月份。换句话说,如果混合使用这两个API,请小心

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

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

您可以使用已经使用的类型,并将时间部分设置为00:00:00。然后在格式化输出时,不要显示时间部分。这可能是一种方法,但我宁愿使用只包含日期元素的数据类型。原因是我要将元素存储在SQL数据库中,据我所知,SQL数据库也只存储“yyyy-MM-dd”类型的“String”(即所谓的“String”)但是是日期类型。@Zeliax否,没有哪个严肃的数据库将日期时间类型存储为字符串。虽然您可以要求为查询结果生成值的字符串表示形式,但不要将该字符串与存储在数据库中的实际值混淆。内部存储将以比str更有效的方式实现但是您希望在Java中使用适当的数据类型是正确的:请参阅Java中的类。大多数Java.time功能在项目中被后移植到Java 6和7。在项目中进一步适应Android。Joda time团队建议迁移到Java.time。您将它们指定为final有什么具体原因吗?
LocalDate localDate = LocalDate.of(2012, Month.January, 31);