Android如何将服务器返回的字符串日期转为dd-mm-yyyy HH:mm格式?
解决日期格式转换问题:从"2013-05-15T10:00:00-0700"到"dd-MM-yyyy HH:mm"
嘿,我来帮你搞定这个日期格式的问题!你现在的代码其实踩了两个常见的小坑,咱们一步步来修正:
问题分析
- 直接打印
Date对象会输出默认格式:你现在打印的是Date实例本身,它的toString()方法会固定输出类似Wed May 15 10:00:00 GMT+05:30 2013的格式,这不是你想要的自定义格式。 - 解析格式不匹配输入字符串:你的输入字符串是
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
相关产品推荐
相关产品推荐

