将数据库时间戳转换为dd/MM/yyyy日期格式报错求助
解决方法:时间戳转dd/MM/yyyy格式
错误原因
你当前代码的两个核心问题:
- 直接把字符串字面量
"date_column_from_db"传给SimpleDateFormat.format()方法——这个方法要求传入Date类型对象,而非字符串,这是报错"Cannot format given Object as a Date"的直接原因。 - 数据库返回的时间戳是
20220321211529042这类数字字符串,需要先解析成日期对象,才能进行格式化。
方案一:使用传统SimpleDateFormat(Java 8之前)
先解析数据库的时间戳字符串为Date,再格式化为目标格式:
// 1. 从数据库获取实际的时间戳字符串 String timestampStr = db.getDataAt(i, "date_column_from_db"); // 2. 定义解析数据库时间戳的格式(匹配20220321211529042的结构:yyyyMMddHHmmssSSS) SimpleDateFormat parser = new SimpleDateFormat("yyyyMMddHHmmssSSS"); Date date = parser.parse(timestampStr); // 解析为Date对象 // 3. 定义目标输出格式并格式化 SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String formattedDate = formatter.format(date); // 4. 设置到Item xi.setItem("Dte", formattedDate);
注意:
SimpleDateFormat是非线程安全的,多线程环境下建议用ThreadLocal包裹实例,避免并发问题。
方案二:使用Java 8+ 新日期API(推荐)
新API的DateTimeFormatter是线程安全的,API设计更清晰:
// 1. 获取数据库时间戳字符串 String timestampStr = db.getDataAt(i, "date_column_from_db"); // 2. 解析时间戳字符串为LocalDateTime DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); LocalDateTime dateTime = LocalDateTime.parse(timestampStr, parseFormatter); // 3. 格式化为dd/MM/yyyy DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String formattedDate = dateTime.format(outputFormatter); // 4. 设置到Item xi.setItem("Dte", formattedDate);
内容的提问来源于stack exchange,提问作者Syafiza Surani
相关产品推荐
相关产品推荐

