如何将服务器接收的TZ格式日期转换为DD/MM/YYYY格式显示
日期格式转换:从ISO 8601到DD/MM/YYYY
服务器返回的日期格式为2022-12-08T06:07:34.780Z(符合yyyy-MM-dd'T'HH:mm:ss.SSSZ规范),需要转换为DD/MM/YYYY格式显示,以下是两种可行实现方案:
方案一:使用SimpleDateFormat(旧API)
原代码未匹配日期中的毫秒部分,且缺少格式化输出逻辑,修正后代码如下:
// 定义输入格式(匹配带毫秒的ISO 8601格式) SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH); inputFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); // Z代表GMT时区 // 定义目标输出格式 SimpleDateFormat outputFormatter = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH); try { // 解析原日期字符串为Date对象 Date date = inputFormatter.parse(orderlist.getCreatedAt()); // 格式化为目标字符串 String formattedDate = outputFormatter.format(date); Utility.log_d("Formatted Date", formattedDate); // 输出示例:08/12/2022 } catch (ParseException e) { e.printStackTrace(); }
方案二:使用Java 8+ java.time API(推荐)
java.time包是线程安全的日期处理API,代码更简洁可靠:
// 直接解析ISO 8601格式字符串为Instant Instant instant = Instant.parse(orderlist.getCreatedAt()); // 转换为UTC时区的LocalDate(如需本地时区,替换为ZoneId.systemDefault()) LocalDate localDate = instant.atZone(ZoneId.of("UTC")).toLocalDate(); // 定义目标格式并格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ENGLISH); String formattedDate = localDate.format(formatter); Utility.log_d("Formatted Date", formattedDate); // 输出示例:08/12/2022
注意事项
- 若需基于本地时区转换日期,将
ZoneId.of("UTC")替换为ZoneId.systemDefault()或指定具体时区(如ZoneId.of("Asia/Shanghai")) - 确保
orderlist.getCreatedAt()返回的字符串格式符合ISO 8601规范,避免解析异常
内容的提问来源于stack exchange,提问作者Vishal Rastogi
相关产品推荐
相关产品推荐

