java.sql.与java.util
Java编程语言提供了两个重要的日期处理类,分别是`java.util.Date`和`java.sql.Date`,它们在处理日期和时间上有着不同的特性和用途。 `java.util.Date`是更通用的日期时间类,它包含了日期和时间的信息,可以精确到毫秒。当我们需要表示一个完整的日期和时间(例如2023-03-06 15:30:45.123),`java.util.Date`是首选。这个类提供了获取和设置日期、时间的方法,以及格式化日期的工具如`SimpleDateFormat`。 然而,`java.sql.Date`是专门为数据库操作设计的。它只包含日期信息,不包含时间部分,通常用于与数据库中的日期类型字段进行交互。例如,当你使用`PreparedStatement`的`setDate()`方法插入或更新日期数据时,需要的是`java.sql.Date`对象。它的格式表现为"年-月-日",不包含时间信息(始终是0点0分0秒)。创建`java.sql.Date`时,可以使用`java.util.Date`的时间戳来初始化,如`new java.sql.Date(new java.util.Date().getTime())`。 两者之间的转换是通过共享的时间戳实现的。要从`java.util.Date`转换为`java.sql.Date`,可以调用`java.util.Date`的`getTime()`方法获取时间戳,然后用这个时间戳初始化`java.sql.Date`。相反,从`java.sql.Date`转换回`java.util.Date`,只需传入`java.sql.Date`的时间戳给`java.util.Date`的构造器。 此外,`java.sql`包还提供了`Time`和`Timestamp`类。`java.sql.Time`仅包含时间信息(小时、分钟和秒),而`Timestamp`则包含日期和时间,精度到纳秒,可以视为`java.util.Date`的增强版,适用于需要高精度的场景。 在数据库操作中,有时需要将字符串转换为`java.sql.Date`。这可以通过`SimpleDateFormat`进行解析,或者使用`StringTokenizer`分隔字符串并直接构造`java.sql.Date`对象。例如,对于格式为"yyyy-mm-dd"的字符串,可以使用`SimpleDateFormat`的`parse()`方法将其转换为`java.util.Date`,然后再转换为`java.sql.Date`。如果需要插入数据库,还可以利用数据库特定的函数,如Oracle的`TO_DATE()`函数,但要注意格式匹配的问题。 `java.util.Date`和`java.sql.Date`在功能和使用场景上有所不同,前者适用于一般日期时间处理,后者则专用于数据库交互,尤其是日期类型的字段。理解它们之间的差异和转换方式是进行有效数据库操作的关键。