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

ISO日期无法转换为12小时制时间问题求助(附Java代码)

问题排查与修复方案

首先,你的代码无法生成12小时制时间的核心原因是格式符使用错误:在输出格式"dd-MM HH:mm a"中,HH代表的是24小时制的小时(00-23),而12小时制的小时需要用hh(01-12)来表示——这就是转换失败的关键问题。

修正后的代码

private String getFormattedDate(String date){
 try {
 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
 formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
 Date value = formatter.parse(date);
 // 将HH替换为hh,对应12小时制小时格式
 SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM hh:mm a");
 dateFormatter.setTimeZone(TimeZone.getDefault());
 date = dateFormatter.format(value);
 } catch (Exception e) {
 date = "00-00 00:00"; // 这里统一了错误返回格式,和目标输出格式保持一致
 }
 return date;
}

关键细节解释

  • HH:对应24小时制小时(取值00-23),比如下午3点会显示为15
  • hh:对应12小时制小时(取值01-12),配合a标识可以区分上午/下午
  • a:自动根据时间显示时段标识(中文环境显示“上午”/“下午”,英文环境显示AM/PM)

额外优化建议(Java 8+)

SimpleDateFormat存在线程不安全的问题,且已被Java 8引入的java.time日期API取代,推荐使用更安全、逻辑更清晰的API实现:

private String getFormattedDate(String date){
 try {
 // 解析UTC时区的ISO格式时间
 Instant instant = Instant.parse(date);
 // 转换为系统默认时区的时间
 ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
 // 格式化为12小时制字符串
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM hh:mm a");
 return zonedDateTime.format(formatter);
 } catch (Exception e) {
 return "00-00 00:00";
 }
}

内容的提问来源于stack exchange,提问作者Mrugesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:28