从 "yyyy-MM-dd hh:mm:ss.SSS" 解析日期和时间 ------> "hh:mm aa" in android

Parsing Date and time from "yyyy-MM-dd hh:mm:ss.SSS" -------> "hh:mm aa" in android

Need to convert the time to a specified format but getting a wrong result.Please help

DateFormat readFormat = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss.sss"); 
DateFormat writeFormat = new SimpleDateFormat( "hh:mm aa");   //Expecting like 05:00 

String from = "2018-02-05 17:00:52.503";
String t0   = "2018-02-05 17:00:55.372";

Date date = null;  //IST
Date date2=null;
try {
    date = readFormat.parse(from);
    date2 =readFormat.parse(to);
} catch (ParseException e) {       
    e.printStackTrace();
}

if (date != null) {                       
    from = writeFormat.format(date);    //Expecting a result of 05.00 pm         
    to   = writeFormat.format(date2);   //Expecting a result of 05:00 pm

}

SimpleDateFormat readFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");

使用这个readFormat

SimpleDateFormat readFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

试试这个

SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
SimpleDateFormat output = new SimpleDateFormat("hh:mm aa");

        Date d = null;
        Date d1 = null;
        try 
        {
            d = input.parse("2018-02-05 17:08:52.503");
            d1 = input.parse("2018-02-05 17:06:55.372");

        } catch (ParseException e) {
            e.printStackTrace();
        }
        String formatted = output.format(d);
        String formatted1 = output.format(d1);

        Log.i("DATE", "" + formatted);
        Log.i("DATE1", "" + formatted1);

输出

I/DATE: 05:08 PM
I/DATE1: 05:06 PM

编辑

SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
SimpleDateFormat output = new SimpleDateFormat("hh:mm aa");

        Date d = null;
        Date d1 = null;
        try 
        {
            d = input.parse("2018-02-05 17:00:52.503");
            d1 = input.parse("2018-02-05 17:00:55.372");

        } catch (ParseException e) {
            e.printStackTrace();
        }
        String formatted = output.format(d);
        String formatted1 = output.format(d1);

        Log.i("DATE", "" + formatted);
        Log.i("DATE1", "" + formatted1);

输出

I/DATE: 05:00 PM
I/DATE1: 05:00 PM

您的问题已经得到解答。我只是想证明 java.time,现代的 Java 日期和时间 API,正在做一些更好的努力,以帮助处理格式模式字母的非常常见的错误情况进行解析。让我们尝试将格式模式字符串与现代 DateTimeFormatter:

一起使用
    DateTimeFormatter readFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss.sss");

这一行抛出 java.lang.IllegalArgumentException: Too many pattern letters: s。所以它不接受三个小写s?它并没有告诉我们情况不正确,毕竟它无法读懂我们的想法;但它确实指出了其中一个错误所在。让我们纠正一下:

    DateTimeFormatter readFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss.SSS");
    String from = "2018-02-05 17:00:52.503";
    LocalDateTime dateTime = LocalDateTime.parse(from, readFormatter);

这次我们再往下看几行,然后点击 java.time.format.DateTimeParseException: Text '2018-02-05 17:00:52.503' could not be parsed: Invalid value for ClockHourOfAmPm (valid values 1 - 12): 17。 AM/PM 的时钟小时数?我们不是故意的,同样,它非常精确地指出了错误的位置。也更正这个:

    DateTimeFormatter readFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

这一次字符串被解析为 2018-02-05T17:00:52.503

在较新的 Android 上,您可以直接使用 java.time。对于较旧的 Android,将 ThreeTenABP 添加到您的项目中,并确保使用子包从 org.threeten.bp 导入日期和时间 类。

链接