java – Android上的时间解析问题

我在尝试解析时间字符串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”).

上一篇:自己来到这个世界的天数


下一篇:国外LEAD联盟赚钱,日付款联盟推荐