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

Android如何将服务器返回的字符串日期转为dd-mm-yyyy HH:mm格式?

解决日期格式转换问题:从"2013-05-15T10:00:00-0700"到"dd-MM-yyyy HH:mm"

嘿,我来帮你搞定这个日期格式的问题!你现在的代码其实踩了两个常见的小坑,咱们一步步来修正:

问题分析

  1. 直接打印Date对象会输出默认格式:你现在打印的是Date实例本身,它的toString()方法会固定输出类似Wed May 15 10:00:00 GMT+05:30 2013的格式,这不是你想要的自定义格式。
  2. 解析格式不匹配输入字符串:你的输入字符串是2013-05-15T10:00:00-0700,末尾带了时区偏移-0700,但你用的解析格式yyyy-MM-dd'T'HH:mm没有覆盖这部分,会导致解析可能不准确。

解决方案(传统SimpleDateFormat方式)

我们需要分两步:先准确解析输入字符串为Date对象,再用目标格式把Date对象转换成字符串。

完整代码示例:

String strDate = "2013-05-15T10:00:00-0700";
// 第一步:用匹配输入的格式解析日期(注意末尾的Z对应时区偏移)
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
// 第二步:用目标格式创建格式化器
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");

try {
    Date date = inputFormat.parse(strDate);
    // 用outputFormat把Date转成目标格式的字符串
    String formattedDate = outputFormat.format(date);
    System.out.println("格式化后的日期:" + formattedDate); // 输出对应时区转换后的结果,比如15-05-2013 22:30
} catch (ParseException e) {
    e.printStackTrace();
}

关键注意点

  • 格式符区分大小写:MM代表月份(01-12),mm代表分钟(00-59),千万别搞混!
  • 时区处理:输入的-0700是西七区,解析后会自动转换为你的系统时区(比如你这里是GMT+05:30),所以最终输出的时间会对应时区转换后的结果。
  • 不要直接打印Date:Date本质是一个时间戳,格式完全由格式化类控制,必须调用format()方法才能得到自定义格式的字符串。

推荐:Java 8+ 使用java.time API(更安全可靠)

SimpleDateFormat是线程不安全的,Java 8及以上推荐使用新的日期时间API,代码更清晰也更健壮:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

String strDate = "2013-05-15T10:00:00-0700";
// 解析带时区的日期
OffsetDateTime dateTime = OffsetDateTime.parse(strDate);
// 定义目标格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm");
// 格式化输出
String formattedDate = dateTime.format(formatter);
System.out.println("格式化后的日期:" + formattedDate);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:34:33