簡體   English   中英

Android 使用 SimpleDateFormat 將字符串解析為日期時間

[英]Android parsing String to Date time with SimpleDateFormat

我有字符串11/08/2013 08:48:10

我使用SimpleDateFormat("MM/dd/yyyy HH:mm:ss")

當我解析它時拋出異常:無法解析的日期

有什么問題嗎?

            String result = han.ExecuteUrl("http://"+han.IP+":8015/api/Values/GetLastChange"); 
            Log.d("Dal","result date time "+result); #result is 11/08/2013 08:48:10
            SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

            Date convertedDate = new Date();
            try
            {

                convertedDate = dateFormat.parse(result);
            }
            catch (ParseException e)
            {
                e.printStackTrace();
            }

它的工作嘗試像這樣解析你的日期..

String dtStart = "11/08/2013 08:48:10";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
try {
    date = format.parse(dtStart);
    System.out.println("Date ->" + date);
} catch (ParseException e) {
    e.printStackTrace();
}

工作代碼在這里。

您可以使用以下代碼將字符串轉換為日期

String myStrDate = "11/08/2013 08:48:10";
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    try {
        Date date = format.parse(myStrDate);
        System.out.println(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

對於反向,這意味着從日期轉換為字符串

SimpleDateFormat myFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    try {
        Date date = new Date();
        String datetime = myFormat.format(date);
        System.out.println("Current Date Time in give format: " + datetime);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

有關日期和時間格式的更多參考。 訪問開發者網站

java.time 和 ThreeTenABP

這不是您要求的答案,而是其他讀者在 2020 年及以后想要的答案。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss");
    String result = "11/08/2013 08:48:10"; 
    LocalDateTime dateTime = LocalDateTime.parse(result, formatter);
    System.out.println("Parsed date and time: " + dateTime);

這個片段的輸出是:

解析日期和時間:2013-11-08T08:48:10

您使用的Date類設計不佳且已過時,因此請不要再使用它。 相反,我使用的是 java.time,現代 Java 日期和時間 API。 如果您需要一個您現在無法升級的舊 API 的Date ,則轉換為:

    Instant i = dateTime.atZone(ZoneId.systemDefault()).toInstant();
    Date oldfashionedDate = DateTimeUtils.toDate(i);

    System.out.println("Converted to old-fashioned Date: " + oldfashionedDate);

轉換為老式日期:Fri Nov 08 08:48:10 CET 2013

你的代碼出了什么問題?

有什么問題嗎?

您的代碼唯一的錯誤是您使用了臭名昭著的SimpleDateFOrmat和設計糟糕的Date類。 你在 2013 年問這個問題的時候沒有錯。java.time 直到 4 個月后才出來。

您的代碼運行良好。 人們可能會推測字符串中的前導空格等阻止了解析。 如果這是問題所在,請嘗試解析result.trim()而不僅僅是result因為trim()返回一個去除了前導和尾隨空格的字符串。

問題:java.time 不需要 Android API 級別 26 嗎?

java.time 在較舊和較新的 Android 設備上都能很好地工作。 它只需要至少Java 6

  • 在 Java 8 及更高版本和更新的 Android 設備(從 API 級別 26)中,現代 API 是內置的。 只有在這種情況下,轉換為Date會更簡單一些: Date.from(i)
  • 在非 Android Java 6 和 7 中獲得 ThreeTen Backport,現代類的 backport(ThreeTen for JSR 310;請參閱底部的鏈接)。
  • 在(較舊的)Android 上使用 ThreeTen Backport 的 Android 版本。 它被稱為 ThreeTenABP。 並確保使用子包從org.threeten.bp導入日期和時間類。

鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM