如何将数据库中的时间戳字符串格式化为 dd/MM/yyyy 日期格式

发布时间 - 2026-01-08 00:00:00    点击率:

本文详解如何将形如 "20250321211529042" 的数据库时间戳字符串正确解析并格式化为 "21/03/2025" 这样的纯日期格式,避免 `cannot format given object as a date` 错误。

在 Java 中处理数据库中存储的“时间戳”时,需特别注意:该字段本质上是字符串(如 "20250321211529042"),而非 java.sql.Timestamp 或 Instant 等真正的时间类型。直接对字符串调用 SimpleDateFormat.format() 会抛出 IllegalArgumentException: Cannot format given Object as a Date —— 因为 format() 方法只接受 Date 及其子类,而你传入的是 String。

✅ 正确做法是:先解析(parse)原始字符串为时间对象,再格式化(format)输出。推荐使用现代 Java 时间 API(java.time),它线程安全、语义清晰且不易出错。

✅ 推荐方案:使用 LocalDateTime + DateTimeFormatter

假设从数据库获取的时间字段值为字符串 "20250321211529042"(共17位:yyyyMMddHHmmssSSS),可按如下步骤处理:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

// 1. 定义输入格式(原始字符串模式)
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmssSSS");
// 2. 定义输出格式(目标日期格式)
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

// 3. 解析字符串为 LocalDateTime(注意:无时区信息,适用于本地时间语义)
String dbTimestampStr = db.getDataAt(i, "date_column_from_db"); // e.g., "20250321211529042"
LocalDateTime dateTime = LocalDateTime.parse(dbTimestampStr, inputFormatter);

// 4. 格式化为所需日期字符串
String formattedDate = dateTime.format(outputFormatter); // → "21/03/2025"

// 5. 设置到业务对象
xi.setItem("Dte", formattedDate);

⚠️ 注意事项

  • 不要混用旧 API:SimpleDateFormat 是线程不安全的,且 format(String) 方法根本不存在(它只有 format(Date)),因此原代码 new SimpleDateFormat("dd/MM/yyyy").format("date_column_from_db") 必然编译失败或运行时报错。
  • 区分 uuuu 与 yyyy:在 DateTimeFormatter 中,推荐使用 uuuu 表示“基于周的年”,对大多数场景更鲁棒;若仅处理公历年份,yyyy 也可用,但 uuuu 是官方推荐。
  • 精度与截断:原始字符串含毫秒(SSS),但目标格式只需日期,LocalDateTime.parse() 自动忽略时间部分的语义歧义,仅按字面解析,完全符合需求。
  • 异常处理:生产环境务必包裹 try-catch,捕获 DateTimeParseException 并做日志或默认值兜底:
try {
    LocalDateTime dateTime = LocalDateTime.parse(dbTimestampStr, inputFormatter);
    xi.setItem("Dte", dateTime.format(outputFormatter));
} catch (DateTimeParseException e) {
    log.warn("Invalid timestamp string: {}", dbTimestampStr, e);
    xi.setItem("Dte", "N/A");
}

✅ 总结

步骤 操作 关键点
❌ 错误做法 对字符串直接调用 format() SimpleDateFormat.format() 不接受 String
✅ 正确流程 String → LocalDateTime.parse() → .format() 使用 java.time,明确解析+格式化两步
? 输出目标 "21/03/2025" 严格匹配 dd/MM/yyyy 模式

遵循此方法,即可稳定、高效、可维护地完成数据库时间戳字符串到标准日期格式的转换。


# java  # yy 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何快速生成专业多端适配建站电话?  实例解析angularjs的filter过滤器  创业网站制作流程,创业网站可靠吗?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何挑选优质建站一级代理提升网站排名?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  如何在Windows环境下新建FTP站点并设置权限?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Android GridView 滑动条设置一直显示状态(推荐)  如何在不使用负向后查找的情况下匹配特定条件前的换行符  如何在阿里云服务器自主搭建网站?  微信小程序 HTTPS报错整理常见问题及解决方案  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  大同网页,大同瑞慈医院官网?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何快速搭建安全的FTP站点?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Java类加载基本过程详细介绍  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何用腾讯建站主机快速创建免费网站?  如何注册花生壳免费域名并搭建个人网站?  js实现点击每个li节点,都弹出其文本值及修改  如何用免费手机建站系统零基础打造专业网站?  如何快速打造个性化非模板自助建站?  Android中AutoCompleteTextView自动提示  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel Fortify是什么,和Jetstream有什么关系  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  jQuery validate插件功能与用法详解  网站制作价目表怎么做,珍爱网婚介费用多少?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Windows Hello人脸识别突然无法使用  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  JavaScript数据类型有哪些_如何准确判断一个变量的类型  佛山网站制作系统,佛山企业变更地址网上办理步骤?  中山网站推广排名,中山信息港登录入口?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel如何实现模型的全局作用域?(Global Scope示例)  如何彻底删除建站之星生成的Banner?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  java中使用zxing批量生成二维码立牌