java.util.Date与java.sql.Date相互转换
### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但在实际应用中有着不同的用途和特性。`java.util.Date` 主要用于表示具体的瞬间,而 `java.sql.Date` 专门用于SQL语句中,代表没有时间部分的日期。因此,在进行数据库操作时,这两种日期类型的相互转换变得尤为重要。 #### 两种日期类的关系 从继承关系上来看,`java.sql.Date` 是从 `java.util.Date` 继承而来,这意味着 `java.sql.Date` 实际上就是 `java.util.Date` 的一个子类。这种设计使得 `java.sql.Date` 自然地拥有 `java.util.Date` 的所有特性,同时为了更好地适应数据库操作的需要,`java.sql.Date` 还进行了特定的设计和优化。 #### 互相转换的方法 1. **使用 getTime() 函数** `java.util.Date` 和 `java.sql.Date` 都提供了 `getTime()` 方法,该方法返回表示该日期的毫秒数。通过这种方法,可以方便地实现两种日期类型的转换: ```java // java.sql.Date 转换为 java.util.Date java.sql.Date sqlDate = new java.sql.Date(123456789L); java.util.Date utilDate = new java.util.Date(sqlDate.getTime()); // java.util.Date 转换为 java.sql.Date java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ``` 2. **使用 SimpleDateFormat 类** `SimpleDateFormat` 是一个以国别敏感的方式格式化和解析日期的具体类。它可以用来格式化(从日期到文本)和解析(从文本到日期)。通过这种方式,也可以实现两种日期类型的转换: ```java SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sqlDate.toString(); java.util.Date utilDate = dateFormat.parse(dateStr); // 注意:这里需要将日期字符串转换为符合 "yyyy-MM-dd" 格式的形式 ``` 3. **直接转换** 由于 `java.sql.Date` 是 `java.util.Date` 的子类,因此可以将 `java.sql.Date` 直接赋值给 `java.util.Date` 类型的变量,反之则需要显式转换。例如: ```java java.sql.Date sqlDate = new java.sql.Date(123456789L); java.util.Date utilDate = sqlDate; // 直接转换 java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = (java.sql.Date) utilDate; // 显式转换 ``` 4. **另类获取日期的方法** 除了上述方法外,还可以使用 `SimpleDateFormat` 来分别获取年、月、日等信息: ```java SimpleDateFormat sy = new SimpleDateFormat("yyyy"); SimpleDateFormat sm = new SimpleDateFormat("MM"); SimpleDateFormat sd = new SimpleDateFormat("dd"); java.util.Date date = new java.util.Date(); String sYear = sy.format(date); String sMon = sm.format(date); String sDay = sd.format(date); ``` #### 注意事项 - 在使用 `java.util.Date` 的 `getYear()` 和 `getMonth()` 方法时需要注意,`getYear()` 返回的值是从1900年开始计算的,需要加上1900才能得到实际年份;`getMonth()` 返回的是从0开始计算的月份,需要加上1。 - 在进行日期转换时,应确保日期格式的一致性,避免因格式不匹配而导致解析错误。 - 使用 `SimpleDateFormat` 进行日期解析时,需要注意输入字符串的格式必须与设置的格式一致,否则会抛出 `ParseException` 异常。 通过上述方法,可以在Java程序中灵活地完成 `java.util.Date` 和 `java.sql.Date` 之间的相互转换,从而满足不同场景下的需求。