Android 用西班牙语处理Date.getTime()需要花费大量时间

Android 用西班牙语处理Date.getTime()需要花费大量时间,android,date,android-sdk-2.3,gettime,Android,Date,Android Sdk 2.3,Gettime,我正在尝试在我的应用程序中将“yyyy-MM-dd'T'hhmmszz”转换为unix时间。 这是我的代码: public String getCreatedAt() { String formattedCreatedAt = twitterCreatedAt.replace(":", ""); SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HHmmssZZ");

我正在尝试在我的应用程序中将
“yyyy-MM-dd'T'hhmmszz”
转换为unix时间。 这是我的代码:

public String getCreatedAt() {
    String formattedCreatedAt = twitterCreatedAt.replace(":", "");
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd'T'HHmmssZZ");
    try {
        formattedCreatedAt = Long.toString(dateFormat.parse(formattedCreatedAt).getTime());
        formattedCreatedAt = formattedCreatedAt.substring(0, formattedCreatedAt.length() - 3);
    } catch (ParseException e1) {
        e1.printStackTrace();
        return "0";
    }
    return formattedCreatedAt;

}
我(奇怪的)问题是,当设备使用英语时,一切正常,但当我使用android 2.3.6在galaxy s2中将设备语言更改为西班牙语时,代码行
formattedCreatedAt=Long.toString(dateFormat.parse(formattedCreatedAt.getTime())需要花费更多的时间来处理。为什么会这样?谢谢

这是需要花费很长时间的部分:

dateFormat.parse(formattedCreatedAt);
据此:

SimpleDataFormat,第一次尝试解析时(或者, 格式化)一个日期,将加载您的所有时区数据 场所这将需要2-3秒。希望这一点能够得到解决 在Android的未来版本中修复

在此期间,考虑使用异步任务来“热身”简化格式。 在你需要它之前,在你的过程中。只需解析数据库中的某个日期 AsyncTask doInBackground()以使其在某个时候加载时区 当它不会对用户产生太大影响时。一旦在您的 进程,SimpleDataFormat将快速运行,直到您的进程完成 终止

这里有一个示例,您可以找到一个解释:

这是由于时区字符串的延迟初始化造成的。 只有第一个电话会花这么长时间。如果SimpleDataFormat是 之后再次使用它是从缓存加载的,不应该使用它 很长时间了

在更改之前,它是在加载类时完成的,因此 一项活动的开始花费了2-3秒的时间。这有一个 对用户体验的影响要比那些 当它第一次实际使用时的秒数。问题是 由于设计的原因,目前无法回避这个问题 SimpleDataFormat api。只有速度更快的手机才能通过 收集这些字符串所花费的时间更少

缓存发生在SimpleDataFormat使用的DateFormatSymbols中 使用。通过重用该实例,只需加载 刺一次(对同一根刺)。您还可以创建该实例 在活动启动时在线程中,以便它已被缓存 一旦它被使用。要初始化字符串,只需调用.hashCode(),它 强制初始化缓存。稍微快一点但不那么简单的方法是 序列化实例。这还强制初始化缓存


由于这种情况仅在第一次调用函数时发生(由于时区字符串的初始化),因此我建议(正如他们所说)使用“预加载”SimpleDataFormat
。我想这会解决你的问题。

你能把这一行分成许多行吗?比如先解析字符串,然后获取call getTime,最后使用Long的toString方法,看看什么需要时间?我添加了一个需要很长时间的特定命令。这是一个“解析”过程