convert date "2009-9-9 22:22:22" to "2009-9-9"

本文介绍如何使用SQL语句将日期格式从默认形式转换为特定格式,通过示例展示了`convert`函数的应用,包括参数选择、日期字符串格式设定及实际操作步骤。

select

 

 convert(char(10),getdate(),120)

你遇到的错误: ``` Multiple annotations found at this line: - Type mismatch: cannot convert from LocalDate to Date ``` ### ❌ 问题原因: 你在使用 `java.time.LocalDate`(Java 8+ 新时间 API)类型的对象,却试图将其传递给 `SimpleDateFormat` 或需要 `java.util.Date` 的方法。 但 **`LocalDate` 和 `java.util.Date` 是不兼容的类型**,不能直接转换。 --- ## ✅ 正确解决方案:将 `LocalDate` 转为 `java.util.Date` 你需要通过 `java.time.ZoneId` 进行桥接转换。 ### 🔧 示例:如何把 `LocalDate` → `java.util.Date` ```java import java.util.Date; import java.time.LocalDate; import java.time.ZoneId; // 假设你的 record.getDueDate() 返回的是 LocalDate LocalDate localDate = record.getDueDate(); // 转换为 java.util.Date Date utilDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); ``` 然后就可以安全地用于 `SimpleDateFormat.format()`: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String formattedDate = sdf.format(utilDate); // OK! ``` --- ### ✅ 完整修正示例(在 JSP 中) 假设你的 `BorrowRecord` 使用的是 `LocalDate` 类型: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="com.example.model.User" %> <%@ page import="com.example.model.BorrowRecord" %> <%@ page import="java.util.List" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> <%@ page import="java.time.LocalDate" %> <%@ page import="java.time.ZoneId" %> <% User user = (User) session.getAttribute("user"); if (user == null) { response.sendRedirect("index.jsp"); return; } List<BorrowRecord> borrowRecords = (List<BorrowRecord>) request.getAttribute("borrowRecords"); // 创建日期格式化工具 SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy年MM月dd日"); SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); %> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>我的借阅</title> <!-- 样式省略 --> </head> <body> <h2>我的借阅记录</h2> <% if (borrowRecords == null || borrowRecords.isEmpty()) { %> <p>您当前没有借阅图书。</p> <% } else { %> <table border="1" cellspacing="0" cellpadding="8"> <tr> <th>书名</th> <th>借阅日期</th> <th>应还日期</th> <th>归还日期</th> <th>状态</th> <th>操作</th> </tr> <% for (BorrowRecord record : borrowRecords) { // 获取 LocalDate 类型的字段 LocalDate borrowLocalDate = record.getBorrowDate(); // 假设是 LocalDate LocalDate dueLocalDate = record.getDueDate(); LocalDate returnLocalDate = record.getReturnDate(); String status = record.getStatus(); %> <tr> <td><%= record.getBook().getTitle() %></td> <td> <%= borrowLocalDate != null ? sdfDate.format(Date.from(borrowLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())) : "—" %> </td> <td> <%= dueLocalDate != null ? sdfDate.format(Date.from(dueLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())) : "—" %> </td> <td> <%= returnLocalDate != null ? sdfDate.format(Date.from(returnLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())) : "未归还" %> </td> <td><%= status.equals("borrowed") ? "已借阅" : status.equals("returned") ? "已归还" : status.equals("overdue") ? "已逾期" : status %> </td> <td> <% if ("borrowed".equals(status)) { %> <a href="return?recordId=<%= record.getRecordId() %>">归还</a> <% } %> </td> </tr> <% } %> </table> <% } %> <a href="bookList">返回图书列表</a> </body> </html> ``` --- ## ✅ 总结:如何解决 `LocalDate` 到 `Date` 的转换 | 类型 | 如何转换 | |------|----------| | `LocalDate` → `java.util.Date` | `Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant())` | | `LocalDateTime` → `java.util.Date` | `Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant())` | | `java.util.Date` → `LocalDate` | `new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()` | --- ### ✅ 推荐改进方向(长期) 虽然上面能解决问题,但建议统一项目中的时间类型: | 方案 | 建议 | |------|------| | ✅ 统一使用 `LocalDate` / `LocalDateTime` | 在实体类中使用新时间 API | | ✅ 在 JSP 中用 EL + 自定义函数或过滤器格式化 | 避免 scriptlet | | ✅ 或者后端转为字符串再传给前端 | 如 `record.setDueDateStr("2025-04-05")` | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值