Java数据类型仅保留日期

mon*_*nda 11 java

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

Sea*_*oyd 5

来自JDK java.sql.Date::

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

为了符合SQL DATE的定义,java.sql.Date实例包含的毫秒值必须通过在与实例关联的特定时区中将小时,分钟,秒和毫秒设置为零来"标准化".

或来自JodaTime:DateMidnightLocalDate(感谢@cdeszaq)

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

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

  • +1为JodaTime的引用.JodaTime中还有`LocalDate`类,它只代表日期组件.它不是一个完全干净的适合,但它过去一直适用于我的需求. (2认同)

Bas*_*que 5

其他答案已经过时了。

\n\n

旧的日期时间类非常麻烦,应该避免。

\n\n

java.time

\n\n

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

\n\n

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

\n\n
LocalDate localDate = LocalDate.of( 2012 , 12 , 7 );\n
Run Code Online (Sandbox Code Playgroud)\n\n

文本表示

\n\n

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

\n\n
\n

localDate.toString() \xe2\x86\x92 2012-12-07

\n
\n\n

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

\n\n

SQL

\n\n

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

\n\n

如果您的驱动程序无法执行此操作,请转而使用 java.sql 类型。旧类中添加了新方法以方便转换。

\n\n
java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有另一个方向。

\n\n
LocalDate localDate = sqlDate.toLocalDate();\n
Run Code Online (Sandbox Code Playgroud)\n\n

搜索堆栈溢出

\n\n

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

\n