11

Java 中的哪种数据类型可以只保存日期而不需要时间组件?例如,只是为了存储12/07/2012. 我正在将数据持久化到/从具有仅日期数据类型的数据库中,因此我正在寻找 Java 中最好的等效数据类型。

4

8 回答 8

6

来自 JDK: java.sql.Date:

一个围绕毫秒值的瘦包装器,允许 JDBC 将其识别为 SQL DATE 值。毫秒值表示自 以来经过的毫秒数January 1, 1970 00:00:00.000 GMT

为了符合 SQL DATE 的定义,由java.sql.Date实例包装的毫秒值必须通过在与实例关联的特定时区中将小时、分钟、秒和毫秒设置为零来“规范化”。

或来自JodaTimeDateMidnightLocalDate(感谢@cdeszaq)

DateMidnight定义时间分量固定在午夜的日期。该类使用时区,因此午夜是本地的,除非使用 UTC 时区。

重要的是要强调这个类代表任何一天的午夜时间。请注意,午夜被定义为 00:00,即一天的开始。

于 2012-06-18T13:20:35.693 回答
4

其他答案已过时。

旧的日期时间类是出了名的麻烦,应该避免。

java.time

java.time框架内置于 Java 8 及更高版本中请参阅Oracle 教程。大部分 java.time 功能向后移植到 Jave 6 和 7并进一步适应 Android

该类LocalDate表示没有时间和时区的仅日期值。

LocalDate localDate = LocalDate.of( 2012 , 12 , 7 );

文本表示

该方法使用标准ISO 8601格式toString生成字符串。

localDate.toString() → 2012-12-07

对于其他格式,请使用DateTimeFormatter.

SQL

符合JDBC 4.2的JDBC 驱动程序可以使用getObjectsetObject方法直接获取/传递 java.time 类型,例如LocalDateSQL 类型DATE

如果您的驱动程序不能这样做,请回退到使用 java.sql 类型。新方法已添加到旧类中以方便转换。

java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );

而另一个方向。

LocalDate localDate = sqlDate.toLocalDate();

搜索堆栈溢出

搜索 Stack Overflow 以获取更多关于使用 java.time 的讨论和示例。例如,这个类似问题的回答。

于 2016-04-11T15:43:35.460 回答
2

日期类。它拥有一个 UNIX 时间戳。在大多数数据库中,您也可以指定一个字段来保存时间戳。您可以根据需要使用 DateFormat 格式化时间戳。

于 2012-06-18T13:15:05.567 回答
2

如果您使用的是 Java 8,则可以使用java.time.LocalDate.

于 2015-10-02T02:34:09.363 回答
1

使用可用的Date类。

于 2012-06-18T13:16:44.853 回答
1

它显示了如何只保留日期(没有时间)

formatter = new SimpleDateFormat("dd/MM/yyyy");

Date date= new Date();

Date todayWithOutTime =formatter.parse(formatter.format(date));
于 2012-06-18T13:25:51.743 回答
1

不幸java.util.Date的是,在 SQL 中有 name Timestamp。仅 Date 没有纯类型,在 Java 中javax.sql.Date扩展java.util.Date和使用这种类型进行日期操作没有任何优势。

commons-lang我正在使用 apache类处理这个问题DateUtils

Date myDate = DateUtils.truncate(timestamp, Calendar.DAY_OF_MONTH);

这将删除时间部分,只留下日期部分。

于 2012-06-18T14:49:01.577 回答
1

使用日期类。这是更好的方法。

于 2013-04-30T08:11:07.370 回答