簡體   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