Java中的哪种数据类型只能包含日期而不需要时间组件?例如,仅存储12/07/2012
。我正在将数据保存到具有仅日期数据类型的数据库中,因此我正在寻找Java中最佳的等效数据类型。
答案 0 :(得分:5)
一个围绕毫秒值的薄包装器,允许JDBC识别 这是一个SQL DATE值。毫秒值表示数字 从
January 1, 1970 00:00:00.000 GMT
开始经过的毫秒数。符合SQL DATE的定义,即毫秒值 由
java.sql.Date
实例包装必须通过设置“标准化” 小时,分钟,秒和毫秒为零 与实例关联的特定时区。
或来自JodaTime:DateMidnight
或LocalDate
(谢谢
@cdeszaq)
DateMidnight
定义时间组件固定的日期 午夜。该类使用时区,因此午夜是本地的,除非a 使用UTC时区。重要的是要强调这个类代表的时间 任何一天的午夜。请注意,午夜定义为00:00, 这是一天的开始。
答案 1 :(得分:2)
日期类。它包含UNIX时间戳。在大多数数据库中,您还可以指定一个字段来保存时间戳。您可以使用DateFormat格式化时间戳。
答案 2 :(得分:2)
其他答案已过时。
旧的日期时间类非常麻烦,应该避免使用。
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
。
JDBC 4.2可以使用getObject
和setObject
方法直接将LocalDate
等java.time类型提取/传递给SQL类型DATE
。
如果您的驱动程序无法执行此操作,请回退到使用java.sql类型。旧类中添加了新方法以便于转换。
java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );
另一个方向。
LocalDate localDate = sqlDate.toLocalDate();
搜索堆栈溢出许多更多讨论和使用java.time的示例。例如,my answer到this 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
。