为什么Android上的SimpleDataFormat解析失败?

San*_*uys 5 java parsing android simpledateformat

DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");

sdf.parse("Sun Dec 13 10:00:00 UTC 2009")
Run Code Online (Sandbox Code Playgroud)

结果

java.text.ParseException:Unparseable date:Sun Dec 13 10:00:00 UTC 2009

注意:此代码似乎适用于普通的Java应用程序,但似乎在Android上失败.

Jon*_*eet 8

它不适合我 - 也许您的默认语言环境使用不同的月份名称?指定格式的区域设置.

// Will definitely work
DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy",
                                      Locale.US);

// Will definitely not work
DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy",
                                      Locale.FRANCE);

// Might work - depends on default locale
DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy")
Run Code Online (Sandbox Code Playgroud)

(问题是一周中的日期和一年中的几个月的名称,这显然是特定于文化的.日期和时间分隔符也可能不同.)

编辑:你还有问题,这很奇怪.只是为了检查,请尝试运行以下简短但完整的程序:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Test {

    public static void main(String[] args) throws Exception {        
        DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy",
                                              Locale.US);
        sdf.parse("Sun Dec 13 10:00:00 UTC 2009");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试取出模式和文本的时区部分.我想知道它是否有问题.

编辑:如果Android SimpleDateFormat实现无法解析时区,您可以使用:

text = text.replace(" UTC ", " ");
Date parsed = sdf.parse(text);
Run Code Online (Sandbox Code Playgroud)

...当然,已将解析器上的时区设置为UTC.您可能希望首先检查它是否包含 "UTC",以防您的数据格式发生变化.