Python3日期时间格式化:如何将API返回的特殊格式转为指定格式
解决ISO 8601日期格式转MM-DD-YYYY HH:MM:SS的问题
嘿,你遇到的这个YYYY-MM-DDTHH:MM:SSZ格式是ISO 8601标准的UTC日期时间格式,其中T是日期与时间的分隔符,Z代表UTC时区(零时区)。下面给你几种常用编程语言的可靠解决方案,帮你转换成目标格式:
1. Python 实现
用Python内置的datetime模块就能轻松处理,既保证时间解析的准确性,又能灵活格式化:
from datetime import datetime # 你的原始ISO格式字符串 iso_datetime = "2018-04-27T23:59:18Z" # 解析ISO格式:把Z替换为+00:00,适配fromisoformat的时区格式要求 dt_object = datetime.fromisoformat(iso_datetime.replace('Z', '+00:00')) # 格式化为MM-DD-YYYY HH:MM:SS target_format = dt_object.strftime("%m-%d-%Y %H:%M:%S") print(target_format) # 输出:04-27-2018 23:59:18
2. JavaScript 实现
利用原生Date对象解析UTC时间,再提取各部分拼接成目标格式:
const isoDatetime = "2018-04-27T23:59:18Z"; const date = new Date(isoDatetime); // 注意:JavaScript的月份是从0开始的,所以要+1 const month = String(date.getUTCMonth() + 1).padStart(2, '0'); const day = String(date.getUTCDate()).padStart(2, '0'); const year = date.getUTCFullYear(); const hours = String(date.getUTCHours()).padStart(2, '0'); const minutes = String(date.getUTCMinutes()).padStart(2, '0'); const seconds = String(date.getUTCSeconds()).padStart(2, '0'); const targetFormat = `${month}-${day}-${year} ${hours}:${minutes}:${seconds}`; console.log(targetFormat); // 输出:04-27-2018 23:59:18
3. Java 实现
使用Java 8及以上版本推荐的java.time标准库,解析和格式化一步到位:
import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; public class DateTimeConverter { public static void main(String[] args) { String isoDatetime = "2018-04-27T23:59:18Z"; // 直接解析带Z的ISO格式 OffsetDateTime utcDateTime = OffsetDateTime.parse(isoDatetime); // 定义目标格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss"); String targetFormat = utcDateTime.format(formatter); System.out.println(targetFormat); // 输出:04-27-2018 23:59:18 } }
小提示
如果只是临时处理固定格式的字符串,也可以用简单的字符串替换+重组,但这种方法不推荐(无法处理时区、日期合法性校验,比如带毫秒的ISO格式就会出错):
iso_datetime = "2018-04-27T23:59:18Z" # 先替换T和Z temp_str = iso_datetime.replace('T', ' ').replace('Z', '') # 拆分日期和时间部分 date_part, time_part = temp_str.split(' ') # 重组日期为MM-DD-YYYY格式 year, month, day = date_part.split('-') new_date = f"{month}-{day}-{year}" # 拼接最终结果 target_format = f"{new_date} {time_part}"
内容的提问来源于stack exchange,提问作者Brandon Atkinson
相关产品推荐
相关产品推荐

