簡體   English   中英

嘗試String to Date解析時出現Java ParseException

[英]Java ParseException while attempting String to Date parsing

我很難解析/格式化從Web服務收到的日期字符串。 我試過多種方法,但沒有運氣。

示例日期字符串:

2011-10-05T03:00:00Z

例外:

W/System.err(10072): java.text.ParseException: Unparseable date: "2011-10-05T05:00:00Z" (at offset 10)
W/System.err(10072):    at java.text.DateFormat.parse(DateFormat.java:626)

示例代碼:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:SSSS");
Date date = formatter.parse(info.AiringTime);

我發現如果我刪除日期和時間之間的“T”並用空格替換它,它將格式化正常。 有人有什么建議嗎?

--UPDATE--

深入研究API文檔后,我發現了這個:

所有響應DateTime值均為UTC格式。 您需要應用UTC偏移量來計算顯示的本地時間。

DateTime是以下列格式之一指定的日期和時間值:

UTC格式:YYYY-MM-DDThh:mm:ssZ。 例如:2011-03-15T02:00:00Z。

偏移的當地時間:YYYY-MM-DDThh:mm:ss +或 - hh:mm(正偏移或負偏移)。 例如,美國太平洋時間:2011-03-14T06:00:00-08:00。

有關UTC格式方法的任何建議嗎?

你可以嘗試:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String dateString = dateString.replace("Z", "GMT+00:00");
Date date = dateFormat.parse(dateString);

上面的代碼應該正確處理在日期中指定時區的情況。 由於Z表示UTC / GMT時區,因此它被GMT取代,因此SimpleDateFormat可以正確解釋它(如果有人知道的話,我很想知道處理這個位的更簡潔方法)。

嘗試,

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

這種模式應該解析你提供的日期: "yyyy-MM-dd'T'HH:mm:ss'Z'"
如果您想使用SimpleDateFormat並且變換數量有限,則可以為每個模式創建單獨的格式化程序並將它們鏈接起來:

Date date = formatter1.parse(info.AiringTime);
if (date == null)
{
  date = formatter2.parse(info.AiringTime);
  if (date == null)
  {
    date = formatter2.parse(info.AiringTime);
    if (date == null)
    {
      date = formatter3.parse(info.AiringTime);
    }
  }
}

或者將它們放在一個列表中並迭代直到非null或不再格式化。
如果你有太多的模式可以實現,你可以自己解析它或嘗試其中一個

這對我有用

    SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'");
    SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa");
    String viewFriendlyDate = "";
    try {
        Date date = isoDateFormat.parse(timestamp);
        viewFriendlyDate = viewFriendlyDateFormat.format(date);

    } catch (ParseException e) {
        e.printStackTrace();
    }
SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'");
SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa");
String viewFriendlyDate = "";
try { 
    Date date = isoDateFormat.parse(timestamp);
    viewFriendlyDate = viewFriendlyDateFormat.format(date);

} catch (ParseException e) { 
    e.printStackTrace(); 
} 

暫無
暫無

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

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