Java数据类型仅保留日期

时间:2012-06-18 13:14:26

标签: java

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

8 个答案:

答案 0 :(得分:5)

来自JDK的

java.sql.Date

  

一个围绕毫秒值的薄包装器,允许JDBC识别   这是一个SQL DATE值。毫秒值表示数字   从January 1, 1970 00:00:00.000 GMT开始经过的毫秒数。

     

符合SQL DATE的定义,即毫秒值   由java.sql.Date实例包装必须通过设置“标准化”   小时,分钟,秒和毫秒为零   与实例关联的特定时区。

或来自JodaTimeDateMidnightLocalDate(谢谢 @cdeszaq)

  

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

     

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

答案 1 :(得分:2)

日期类。它包含UNIX时间戳。在大多数数据库中,您还可以指定一个字段来保存时间戳。您可以使用DateFormat格式化时间戳。

答案 2 :(得分:2)

其他答案已过时。

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

java.time

java.time框架内置于Java 8及更高版本中。见Oracle Tutorial。 java.time的大部分功能都是back-ported to Jave 6 & 7,还有adapted to Android

LocalDate类表示没有时间且没有时区的仅限日期的值。

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

文字表示

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

  

localDate.toString()→2012-12-07

对于其他格式,请使用DateTimeFormatter

SQL

符合JDBC drivers

JDBC 4.2可以使用getObjectsetObject方法直接将LocalDate等java.time类型提取/传递给SQL类型DATE

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

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

另一个方向。

LocalDate localDate = sqlDate.toLocalDate();

搜索堆栈溢出

搜索堆栈溢出许多更多讨论和使用java.time的示例。例如,my answerthis similar Question

答案 3 :(得分:1)

使用可用的 Date 类。

答案 4 :(得分:1)

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

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

Date date= new Date();

Date todayWithOutTime =formatter.parse(formatter.format(date));

答案 5 :(得分:1)

不幸的是,java.util.Date是一种在SQL中具有名称Timestamp的东西。仅有Date的纯类型,javax.sql.Date扩展java.util.Date并且在Java中使用此类型进行日期操作不会给您带来任何好处。

我正在使用apache commons-lang class DateUtils

处理此问题
Date myDate = DateUtils.truncate(timestamp, Calendar.DAY_OF_MONTH);

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

答案 6 :(得分:1)

使用Date类。这是更好的方法。

答案 7 :(得分:1)

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