我已经创建了这个功能来解析日期,但是这给出了例外:无法解析的日期:“Fri Oct 10 23:11:07 IST 2014”(在偏移20处)。请帮忙,因为我无法弄清楚这段代码有什么问题。
public Date parseDate() {
String strDate ="Fri Oct 10 23:11:29 IST 2014";
String newPattern = "EEE MMM dd HH:mm:ss Z yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
try {
Date date = formatter.parse(strDate);
return date;
} catch (java.text.ParseException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:6)
使用解析器的区域设置:
SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.US);
这应该可以解决您的问题。至少它适用于我的例子。
修改强>
看起来Android和IST时区确实存在问题。我可以使用上述模式解析Android上的任何时区,但不能解析IST。
如果字符串中有IST区域,快速破解就是修改时区部分。 这对我也适用于Android:
String strDate = "Fri Oct 10 23:11:29 IST 2014";
strDate = strDate.replace(" IST ", " GMT+0530 ");
String newPattern = "EEE MMM dd HH:mm:ss Z yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.ENGLISH);
答案 1 :(得分:1)
SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
formatter.setLenient(true);
//将格式化程序设置为lenient可以解决问题
感谢大家的帮助......
答案 2 :(得分:0)
使用此代码它将起作用。我认为IST存在问题,它无法识别它
public Date parseDate(String strDate) {
strDate = "Fri Oct 10 23:11:29 2014";
String newPattern = "EEE MMM dd HH:mm:ss yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
formatter.setTimeZone(TimeZone.getTimeZone("IST"));
Date date;
try {
date = formatter.parse(strDate.trim());
Log.i("minal", "date:" + date);
return date;
} catch (java.text.ParseException e) {
e.printStackTrace();
Log.d("Populace", "ParseException: " + e.getLocalizedMessage());
}
return null;
}
答案 3 :(得分:0)
根据文件http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html,
Letter Date or Time Component Presentation Examples
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
您应该使用较小的z
代替大写Z
作为一般时区。
但是,我尝试了它(Java SE 1.8.0),它同时适用于z
和Z
。
正如Android007评论所写的那样:"在Java应用程序中它的工作正常,但在Android上却给出了异常" - 可能是您的库比标准Oracle J2SE更彻底地实现合同:)
答案 4 :(得分:0)
您的日期模式包含区域设置敏感模式。由于SimpleDateFormat支持在不同的语言环境(英语,法语,美国,日语......等)中解析日期,因此您必须指定您正在使用的日期。
从您的" IST"判断,您计算机上当前的默认语言环境可能不是英语或美国。由于字符串" Fri"和" 10月"如果是英文,解析将失败并使用您的默认语言环境。
将格式化程序编辑为以下内容,它应该有效:
SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.ENGLISH);