2011-06-09 146 views
7

在照顾几个现有的帖子后,我仍然无法让我的SimpleDateFormat解析器工作。这里是代码:SimpleDateFormat:无法解析的日期异常

SimpleDateFormat df = new SimpleDateFormat(
    "EEE, dd MMM yyyy HH:mm:ss Z", Locale.US); 
try { 
    volcanoListDate = df.parse(currentValue); 
} catch (ParseException e) { 
    Log.d("DEBUG", e.toString()); 
    Log.d("DEBUG", currentValue); 
} 

我总是以ParseException结束。这里是调试消息的输出:

06-09 23:52:17.478:DEBUG/DEBUG(2436):java.text.ParseException:不可解析日期:
06-09 23:52:17.478 :DEBUG/DEBUG(2436):Wed,08 Jun 2011 03:23:55 -0500

Locale ist set and the pattern looks okay。我错在哪里?

+0

适合我(普通java) – Bozho 2011-06-09 22:07:35

+5

试试'Locale.ENGLISH'。也许Android不支持国家/地区特定的区域设置。 – BalusC 2011-06-09 22:24:13

+0

已经尝试过。它不适用于Locale.English,英国或没有Locale。 – 2011-06-09 22:51:45

回答

4

下面是解:

  SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US); 
     try { 
      volcanoListDate = df.parse(currentValue.replaceAll("\\p{Cntrl}", "")); 
     } catch (ParseException e) { 
      Log.d("VOLCANO_DEBUG", e.toString()); 
      Log.d("VOLCANO_DEBUG", currentValue); 
     } 

的重要的变化是.replaceAll( “\\ p {CNTRL}”, “”)从分析的字符串中删除的控制字符。 奇怪的是,我没有看到字符串所在的xml中的Notepad ++中的任何字符。但是,显然有一些东西,它现在正在工作。

感谢您的帮助!

3

检查您的输入是否为非打印字符,如tab(而不是空格)等。有时它无法解析的原因与数字的格式无关,而且很多与意外字符有关(你不能总是看到)。

考虑到有些人已经报道过“为我工作”(@Thanks Bozho!),我会强烈怀疑输入字符串中有不可打印的字符。谁知道,你可能会在某处嵌入一个垂直标签!

+0

谢谢,适合我!下面列出使用'.replaceAll(“\\ p {Cntrl}”,“”)'的解决方案。以前我alreadey试图删除所有没有帮助的空格。 – 2011-06-10 05:39:54

相关问题