尝试解析时间字符串时出现解析异常02:22 p.m.
.
我有以下转换函数:
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
and newdateformat
是相同的:hh:mm a
.
它会导致日志中出现以下错误:
java.text.ParseException:无法解析的日期:“02:22 p.m.” (偏移量 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
正如雨果如此热情而正确地推荐的是他的回答,我使用的是现代 Java 日期和时间 API,因此您将需要 ThreeTenABP 来执行上述代码。看如何在Android项目中使用ThreeTenABP。或者,您可能想尝试与您的过时版本相同的区域设置SimpleDateFormat
.
美国西班牙语语言环境在我的 Java 8 上显示了相同的行为,因此您也可以尝试一下:Locale.forLanguageTag("es-US")
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)