You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将数据库时间戳转换为dd/MM/yyyy日期格式报错求助

解决方法:时间戳转dd/MM/yyyy格式

错误原因

你当前代码的两个核心问题:

  1. 直接把字符串字面量 "date_column_from_db" 传给 SimpleDateFormat.format() 方法——这个方法要求传入Date类型对象,而非字符串,这是报错 "Cannot format given Object as a Date" 的直接原因。
  2. 数据库返回的时间戳是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:55:19