繁体   English   中英

从“yyyy-MM-dd hh:mm:ss.SSS”解析日期和时间 -------> android中的“hh:mm aa”

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

需要将时间转换为指定格式但得到错误结果。请帮助

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

}
  • 列表项## 需要这样放##

    /*但得到一个输出:

     from= "05:08 pm" instead of 05:00 pm to = "05:06 pm" instead of 05:00 pm

    */

的SimpleDateFormat readFormat =新的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带有子包的日期和时间类。

链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM