我使用以下简单的日期格式来解析字符串,
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
String time = "Wed Mar 06 21:00:00 IST 2014";
Date date = dateFormat.parse(time);
这不会引发任何错误,
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
String time = "Wed Mar 06 21:00:00 KST 2014";
Date date = dateFormat.parse(time);
引发无法解析的日期异常。
IST -印度标准时间 *KST -韩国标准时间*
由于例外情况,我决定删除时区。
还有别的方法可以解决这个问题吗?
请帮帮忙
发布于 2014-03-06 05:52:54
这两个日期都是无效的,因此都会抛出错误:
String time = "Wed Mar Thu 21:00:00 IST 2014";
清华是无效的,因为一周中的一天已经被EEE - Wed
组合所消耗。你需要在那里安排一个月的一天。
尝试解析以下日期,它应该适用于您的情况:
String time = "Wed Mar 12 21:00:00 KST 2014";
发布于 2014-03-06 05:51:18
试试这段代码,看看KST是否是有效的时区id。
String[] timezoneIdArr = TimeZone.getAvailableIDs();
for (String tzId : timezoneIdArr) {
System.out.println(tzId);
}
如果没有,则输入区域id,如“亚洲/首尔”之类的。那应该管用。
请注意,我还没有试过。请检查时区的准确拼写。
更新:
试试下面的代码。看看KST的产量。取消评论,并尝试与亚洲/首尔。供您参考,取消评论,看看PST是如何工作的。
private static void calTest() {
String zone = "KST";
//String zone = "Asia/Seoul";
//String zone = "PST";
long millis = System.currentTimeMillis();
//get calendar of Korea time zone.
Calendar kst = Calendar.getInstance(TimeZone.getTimeZone(zone));
//set its time to a UTC millisecond value. probably redundant, but just to demonstrate
kst.setTimeInMillis(millis);
String formattedKst = formatTime(kst);
System.out.println(" Original - " + formattedKst);
//now we convert the formatted string back to a Calendar .
Calendar parsedKst = parseTime(formattedKst, zone);
System.out.println(" Parsed - ");
System.out.println("" + parsedKst.get(Calendar.YEAR) + "-"
+ (parsedKst.get(Calendar.MONTH) + 1) + "-"
+ parsedKst.get(Calendar.DATE) + " "
+ parsedKst.get(Calendar.HOUR_OF_DAY) + ":"
+ parsedKst.get(Calendar.MINUTE) + ":"
+ parsedKst.get(Calendar.SECOND) + "."
+ parsedKst.get(Calendar.MILLISECOND) + " "
+ parsedKst.getTimeZone().getID() + " "
+ parsedKst.getTimeZone().getDisplayName() + " "
);
}
private static Calendar parseTime(String formattedDateTime, String ID) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX zzz");
sdf.setTimeZone(TimeZone.getTimeZone(ID));
sdf.setLenient(false);
try {
sdf.parse(formattedDateTime);
} catch (ParseException e) {
e.printStackTrace();
}
return sdf.getCalendar();
}
private static String formatTime(Calendar cal) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX zzz");
sdf.setCalendar(cal);
return sdf.format(cal.getTime());
}
https://stackoverflow.com/questions/22216038
复制相似问题