Java转换UTC时间:2008-02-13T14:15:44.000Z 怪异的时间格式

本文介绍了一种常见的UTC时间格式(如2008-02-13T14:15:44.000Z),并提供了Java代码示例说明如何将这种格式的时间字符串转换为本地时间和日期格式。
近日,把玩Google Pisaca API的时候发现返回一个这样的时间格式:
2008-02-13T14:15:44.000Z ,问人未果.
窃以为T,z应该是和时区有关,经过google果然这个就是传说中的UTC 通用标准时以z来标识
其它的时区显示的时间与通用协调时间不同,因此例如你能使用太平洋标准时间2007-12-25T06:00:00:000-8:00来显示2007年12月25日的早上6:00(它比UTC时间滞后8小时)。

这个没法使用,得转换下.
public class TimeZoneTest 
{
public static void main (String args[])
{
try
{
String ts = "2007-10-23T17:15:44.000Z";
System.out.println("ts = " + ts);
ts = ts.replace("Z", " UTC");
System.out.println("ts = " + ts);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");

Date dt = sdf.parse(ts);


TimeZone tz = sdf.getTimeZone();
Calendar c = sdf.getCalendar();
System.out.println("Display name: " +
tz.getDisplayName());
System.out.println(getString(c));
}
catch(ParseException pe)
{
System.out.println("Error offset: " + pe.getErrorOffset());
pe.printStackTrace();
}
}


private static String getString(Calendar c)
{
StringBuffer result = new StringBuffer();
result.append(c.get(Calendar.YEAR));
result.append("-");
result.append((c.get(Calendar.MONTH) + 1));
result.append("-");
result.append(c.get(Calendar.DAY_OF_MONTH));
result.append(" ");
result.append(c.get(Calendar.HOUR_OF_DAY));
result.append(":");
result.append(c.get(Calendar.MINUTE));
result.append(":");
result.append(c.get(Calendar.SECOND));
return result.toString();
}


}


运行结果:
ts = 2007-10-23T17:15:44.000Z 
ts = 2007-10-23T17:15:44.000 UTC
Display name: Coordinated Universal Time
2007-10-23 17:15:44
<think>首先,用户的问题是关于Python脚本的:他们想将时间字符串 "2025-08-17T10:05:29.913139Z" 转换为 "20250817100529"。这意味着我需要提供一个Python代码示例来实现这个转换。 关键点: - 输入格式:ISO 8601格式,包括日期、时间、微秒和时区(Z表示UTC)。 - 输出格式:一个紧凑的字符串,没有分隔符,格式为 YYYYMMDDHHMMSS。 在Python中,处理日期和时间的最佳方式是使用 datetime 模块。我可以使用 datetime 来解析输入字符串,然后格式化输出字符串。 步骤: 1. 解析输入字符串:使用 datetime.datetime.strptime() 或 datetime.datetime.fromisoformat() 来创建一个 datetime 对象。 - 输入是 "2025-08-17T10:05:29.913139Z",这类似于ISO格式,但有一个微秒部分。 - Python 的 fromisoformat() 方法可以处理ISO 8601格式,但需要确保它支持微秒和时区。 - 或者,使用 strptime() 指定格式。 2. 格式化输出:使用 datetime.strftime() 方法将 datetime 对象转换为所需的字符串格式。 - 输出格式是 "20250817100529",这对应于 "%Y%m%d%H%M%S"。 对于时区: - 输入字符串以 "Z" 结尾,表示UTC时间- 在输出中,用户没有指定时区,所以输出中不包括时区信息,只包括日期和时间- 我需要确保 datetime 对象是时区感知的,或者直接处理UTC时间。 在Python中: - 使用 fromisoformat() 可以处理带 "Z" 的字符串,但可能需要Python 3.11+ 或处理时区。 - 一个更兼容的方法是使用 strptime()。 strptime 格式: - 输入字符串:"2025-08-17T10:05:29.913139Z" - 格式字符串:"%Y-%m-%dT%H:%M:%S.%fZ" 或类似。 在输出中,我不需要微秒部分,只需要秒。所以,在格式化时,使用 "%S" 会只显示秒数,不包括微秒。 代码思路: 1. 导入 datetime 模块。 2. 定义输入字符串。 3. 解析为 datetime 对象。 4. 格式化输出字符串。 示例代码: ```python from datetime import datetime input_str = "2025-08-17T10:05:29.913139Z" # 解析输入 dt = datetime.strptime(input_str, "%Y-%m-%dT%H:%M:%S.%fZ") # 格式化输出 output_str = dt.strftime("%Y%m%d%H%M%S") print(output_str) ``` 测试这个: - 输入:2025-08-17T10:05:29.913139Z - 解析后:datetime对象,日期为2025-08-17时间10:05:29.913139 - 输出:dt.strftime("%Y%m%d%H%M%S") 应该给 "20250817100529" 是的,这应该工作。 用户提到了引用,但引用是关于时间转换和字符串编码的,与这个具体问题不直接相关。我可以忽略它们,除非有直接应用。 系统指令: - 所有行内数学表达式用 $...$,但这里没有数学。 - 独立公式用 $$...$$,但这里没有。 - LaTeX语法正确:不适用。 - 使用中文回答:整个响应应该用中文。 - 生成相关问题:在最后添加相关问题。 - 在引用的段落末尾添加引用标识:但用户没有提供可引用的内容;引用是给定的,但可能不相关。我应该基于回答添加引用,如果适用。 在回答中: - 结构清晰:逐步解释。 - 提供代码示例。 - 确保可靠。 最后,生成相关问题。 完整响应结构: 1. 解释问题。 2. 提供Python代码。 3. 解释代码。 4. 添加相关问题。 用中文写。</think>### Python 时间格式转换:从ISO到紧凑字符串 您的需求是将时间字符串从ISO 8601格式(如 "2025-08-17T10:05:29.913139Z")转换为紧凑的 "YYYYMMDDHHMMSS" 格式(如 "20250817100529")。在Python中,这可以通过 `datetime` 模块高效实现,具体步骤如下: 1. **解析输入字符串**:使用 `datetime.strptime()` 方法将ISO字符串解析为 `datetime` 对象。输入字符串包含日期、时间、微秒和时区("Z" 表示UTC)。 2. **格式化输出字符串**:使用 `datetime.strftime()` 方法将 `datetime` 对象转换为所需的格式,忽略微秒和时区信息。 3. **处理时区**:输入字符串以 "Z" 结尾表示UTC时间,解析时会自动处理为无时区偏移。输出中不需要时区信息。 以下是完整的Python脚本示例: ```python from datetime import datetime # 输入时间字符串(ISO格式) input_str = "2025-08-17T10:05:29.913139Z" # 解析输入:使用strptime指定格式,%f处理微秒,Z表示UTC dt_obj = datetime.strptime(input_str, "%Y-%m-%dT%H:%M:%S.%fZ") # 格式化输出:转换为紧凑字符串(YYYYMMDDHHMMSS) output_str = dt_obj.strftime("%Y%m%d%H%M%S") print(output_str) # 输出:20250817100529 ``` ### 代码解释: - **`datetime.strptime(input_str, format)`**:解析输入字符串。 - 格式字符串 `"%Y-%m-%dT%H:%M:%S.%fZ"` 对应ISO格式:`%Y`(年)、`%m`(月)、`%d`(日)、`%H`(时)、`%M`(分)、`%S`(秒)、`%f`(微秒),`Z` 表示UTC时区[^1]。 - **`dt_obj.strftime("%Y%m%d%H%M%S")`**:格式化输出。 - 输出格式移除所有分隔符(如 "-"、":"),只保留数字部分。 - **微秒处理**:输入中的微秒(`.913139`)在解析时被忽略,因为输出格式 `%S` 只包含秒数。 - **时区处理**:输入是UTC时间,解析后 `dt_obj` 是无时区对象,输出不包含时区信息。如果需要处理其他时区,可以添加 `pytz` 模块[^1]。 ### 测试示例: - 输入:`"2025-08-17T10:05:29.913139Z"` - 输出:`"20250817100529"` - 运行脚本后,控制台会打印结果。 此方法高效可靠,适用于Python 3.6及以上版本。如果您有多个字符串或需要批量处理,可以将代码封装为函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值