如何转换含小数秒与额外字符的日期时间格式
日期时间字符串转换解决方案
针对你需要将2018-12-30T18:03:23.400Z转换为2018-12-30 18:03:23.4的需求,以下是几种实用的实现方式:
Python 实现
方法1:直接字符串处理(格式固定时首选)
利用字符串替换和截断操作快速处理,适合格式完全固定的场景:
original = "2018-12-30T18:03:23.400Z" # 替换T为空格,移除末尾的Z processed = original.replace('T', ' ').rstrip('Z') # 处理小数秒,去掉末尾多余的0 if '.' in processed: date_part, sec_frac = processed.split('.', 1) sec_frac = sec_frac.rstrip('0') or '0' # 若小数部分全为0则保留一个0 result = f"{date_part}.{sec_frac}" else: result = processed print(result) # 输出: 2018-12-30 18:03:23.4
方法2:用datetime模块解析(通用场景)
通过标准库解析ISO格式时间,再按需格式化,能兼容更多时间格式变种:
from datetime import datetime original = "2018-12-30T18:03:23.400Z" # 解析UTC时间(Z代表UTC时区) dt = datetime.fromisoformat(original.replace('Z', '+00:00')) # 提取毫秒部分并去掉末尾的0 ms_part = str(dt.microsecond // 1000).rstrip('0') or '0' # 拼接成目标格式 result = f"{dt:%Y-%m-%d %H:%M:%S}.{ms_part}" print(result) # 输出: 2018-12-30 18:03:23.4
JavaScript 实现
方法1:字符串直接处理
const original = "2018-12-30T18:03:23.400Z"; // 替换T为空格,移除末尾的Z let processed = original.replace('T', ' ').slice(0, -1); // 处理小数秒部分 if (processed.includes('.')) { const [datePart, secFrac] = processed.split('.'); // 正则去掉末尾所有0,若为空则设为0 const trimmedFrac = secFrac.replace(/0+$/, '') || '0'; processed = `${datePart}.${trimmedFrac}`; } console.log(processed); // 输出: 2018-12-30 18:03:23.4
方法2:用Date对象解析
const original = "2018-12-30T18:03:23.400Z"; const date = new Date(original); // 拼接日期部分(UTC时区) const dateStr = `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(date.getUTCDate()).padStart(2, '0')}`; // 拼接时间部分 const timeStr = `${String(date.getUTCHours()).padStart(2, '0')}:${String(date.getUTCMinutes()).padStart(2, '0')}:${String(date.getUTCSeconds()).padStart(2, '0')}`; // 处理小数秒 const ms = date.getUTCMilliseconds(); const fracSec = ms.toString().replace(/0+$/, '') || '0'; const result = `${dateStr} ${timeStr}.${fracSec}`; console.log(result); // 输出: 2018-12-30 18:03:23.4
内容的提问来源于stack exchange,提问作者CardCape
相关产品推荐
相关产品推荐

