java - SimpleDateFormat 解析 strftime 生成的日期时出现问题

标签 java python timestamp simpledateformat strftime

我有一个时间戳字符串 2013-03-01T11:22:18.01Zstrftime("%Y:%m:%dT%H:%M:%SZ") 生成,这是 Python 语言。

现在我正在尝试使用Java的SimpleDateFormat解析这个时间戳。我发现的很多示例代码似乎都是这样做的:

String DATE_FORMAT = "YYYY-MM-DD'T'hh:mm:ss.ssZ"
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT)
sdf.setLenient(false)
sdf.parse(timestamp) <---- throws ParseException here

但是,我收到一个错误对话框,上面写着 Unparseable date: "2013-03-01T11:22:18.01Z"

我一直在调整DATE_FORMAT到处尝试各种各样的事情,但我已经在同一个障碍上停留了很长一段时间了。看来我需要借用 stackoverflow 社区的力量来解决这个问题。

最佳答案

除了 yyyyYYYY 以及 ddDD 相比,Z > 也引起了问题。您的 SimpleDateFormat 具有如下模式:

yyyy-MM-dd'T'HH:mm:ss.ssZ
 |   |  |  | |  |  |  | |
 |   |  |  | |  |  |  | -----timezone (RFC 822 time zone, ex: -0800)
 |   |  |  | |  |  |  -------seconds again (maybe you wanted SS for milliseconds)
 |   |  |  | |  |  ----------seconds (0-59)
 |   |  |  | |  -------------minutes (0-59)
 |   |  |  | ----------------hours (0-23)
 |   |  |  ------------------the character T
 |   |  ---------------------day in month 
 |   ------------------------month in year
 ----------------------------year

但是您传递的字符串 "2013-03-01T11:22:18.01Z" 末尾只是一个 Z,而不是时区。

如果您实际上希望末尾有一个 Z,那么您需要在格式字符串中引用它:

yyyy-MM-dd'T'HH:mm:ss.ss'Z'

就像您对T所做的那样。来自 javadoc :

Text can be quoted using single quotes (') to avoid interpretation.

关于java - SimpleDateFormat 解析 strftime 生成的日期时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076290/

相关文章:

java - 如何使用数据列表检查多行输入

python - 如何使用 python db-api 安全地生成 SQL LIKE 语句

java - 时间戳在Java中即时

java - 如何动态有效地应用 RTL

java - 如何使用Java播放位于我的.jar中的声音

java - 将现有项目与外部开源 jar 分离的实践/策略

python - 删除第一个字符后的所有字符

Python 过采样在管道中组合了多个采样器

php - 如何在 PHP 中将 MySQL TIMESTAMP 转换为日期时间

timestamp - 定义当前日期 1 个月前的日期