我在尝试解析时间字符串02:22时得到一个解析异常.
我有以下转换功能:
public static long convertdatetotimestamp(String datestring, String newdateformat, String olddateformat){
SimpleDateFormat originalFormat = new SimpleDateFormat(olddateformat,Locale.ROOT);
SimpleDateFormat targetFormat = new SimpleDateFormat(newdateformat,Locale.ROOT);
Date date = null;
try {
date = originalFormat.parse(datestring);
String formattedDate = targetFormat.format(date);
Date parsedDate = targetFormat.parse(formattedDate);
long nowMilliseconds = parsedDate.getTime();
return nowMilliseconds;
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
该方法在另一个活动中调用,时间格式为“02:22 p.m.”. olddateformat和newdateformat是一样的:hh:mm a.
它会导致日志中出现以下错误:
java.text.ParseException: Unparseable date: “02:22 p.m.” (at offset 6)
如何解决这个问题?时间恰好是上面提到的格式.
解决方法:
它恰好发生在上午和下午.在盖尔语言环境中被称为这个.至少在我的Java 8上.我很不确定(所有)Android手机是否会出现这种情况,但您可能会对它进行一些实验.
String datestring = "02:22 p.m.";
Locale parseLocale = Locale.forLanguageTag("ga");
DateTimeFormatter originalFormat = DateTimeFormatter.ofPattern("hh:mm a", parseLocale);
System.out.println(LocalTime.parse(datestring, originalFormat));
这打印
14:22
正如Hugo如此热烈而正确地推荐的是his answer,我使用的是现代Java日期和时间API,因此您需要ThreeTenABP才能获得上述代码.请参阅How to use ThreeTenABP in Android Project.或者,您可能希望使用过时的SimpleDateFormat尝试相同的区域设置.
美国西班牙语语言环境在我的Java 8上显示相同的行为,因此您也可以尝试:Locale.forLanguageTag(“es-US”).