java.text.ParseException:无法解析的日期:“2016-02-01 10:00pm”(在偏移量 16 处)

java.text.ParseException: Unparseable date: "2016-02-01 10:00pm" (at offset 16)

我想将时间格式从 12 小时更改为 24 小时。

我有一个这样的日期字符串

    String date = "2016-02-01";
    String time = "10:00pm";

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mmaa");

        DateFormat outputformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date daaateee = null;
        String output = null;
        try{

            String ddd =date + " " + time;
            daaateee= df.parse(ddd);

            output = outputformat.format(daaateee);

            System.out.println(output);
        }catch(ParseException pe){
            pe.printStackTrace();
        }

我正在尝试这样更改,但它显示错误:

System.err: java.text.ParseException: Unparseable date: "2016-02-01 10:00pm" (at offset 16)

此代码适用于所有 devices.but 不适用于具有棉花糖 os 的 Moto g3。有什么理由不在棉花糖设备中转换吗?

帮我把时间格式12H转换成24H。 提前致谢

我怀疑问题 可能 是因为您没有指定语言环境 - 所以它使用的是您的系统语言环境,它可能有不同的 am/pm 说明符。这是一个在桌面上对我有用的例子 Java:

import java.util.*;
import java.text.*;

class Test {
    public static void main(String[] args) throws Exception {
        String date = "2016-02-01";
        String time = "10:00pm";
        TimeZone utc = TimeZone.getTimeZone("Etc/UTC");

        DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mmaa", Locale.US);
        inputFormat.setTimeZone(utc);
        Date parsed = inputFormat.parse(date + " " +time);
        DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        outputFormat.setTimeZone(utc);
        System.out.println(outputFormat.format(parsed));
    }
}

请注意,我还将时区指定为 UTC,以避免夏令时更改出现任何问题(其中 date/time 组合可能不明确或根本不存在)。

如果在 Android 下仍然对您不起作用,请尝试使用 "yyyy-MM-dd hh:mmaa" 而不是 "yyyy-MM-dd hh:mma" - 尽管我仍然 期望 [=21] =] 前一种模式起作用。不过,指定时区和语言环境绝对值得。

支持am/pm的日期格式需要是'a'而不是'aa',

所以你基本上需要做 DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mma");