【发布时间】:2015-05-15 12:04:16
【问题描述】:
我正在尝试将字符串解析为日期对象。之前我使用了 parse(String) 定义,但是像 4/1/2004 2:00:00asasasas 这样的日期被正确解析,这是错误的。所以我使用了 ParsePosition 签名parse(String,parsePosition) 并检查索引是否不等于长度,那么它是一个无效的日期。但上述逻辑对于字符串为“2004 年 4 月 1 日凌晨 2:00:00 的字符串失败。虽然它是一个有效的日期,但由于索引和长度逻辑,当我尝试以“M / dd / YYYY”格式解析它时,它说无效日期。解析器解析正确的日期部分并且不考虑整个字符串。任何方式来实现它?formatStr可以是任何格式模式。
请指教。
public static void main(String[] args) {
String formatStr="M/dd/YYYY";
SimpleDateFormat sd = new SimpleDateFormat(formatStr, Locale.getDefault());
String str = "4/1/2004 2:00:00 AM";
ParsePosition pp1 = new ParsePosition(0);
Date retDate = sd.parse(str, pp1);
if(retDate==null ||pp1.getIndex()!=str.length() ){
System.out.println("I have a invalid Date");
}
}
【问题讨论】:
-
" 当我尝试以 "M/dd/YYYY" 格式解析它时,它说日期无效" - 当然是这样,因为该格式不包括时间,而你的字符串值做。你想要
yyyy而不是YYYY请注意... -
你的格式应该是
M/d/y h:m:s a -
感谢您的回复。当前 API 实现接受字符串文本和日期格式模式(可以是 M/d/y h:m:s a 或 M/dd/YYYY)。这取决于用户他想要什么日期格式。当前 API 使用 M/dd/YYYY 模式完美解析字符串 4/1/2004 2:00:00 AM。所以我正在寻找一种向后兼容的方法,这意味着它通过 4/1/2004 2:00: 00 AM 但在 2004 年 4 月 1 日 2:00:00 abcd 使用“M/dd/YYYY”模式失败。我知道它有点蹩脚,但任何方向都会有帮助
标签: java date simpledateformat