gpt4 book ai didi

android - Date.getTime() 在使用西类牙语时需要花费大量时间来处理

转载 作者:行者123 更新时间:2023-11-29 00:29:11 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中将 "yyyy-MM-dd'T'HHmmssZZ" 转换为 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;

}

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

这是耗时较长的部分:

dateFormat.parse(formattedCreatedAt);

最佳答案

根据这个site :

SimpleDateFormat, the first time you try parsing (or, presumably, formatting) a date, will load in all the timezone data for your locale. This will take 2-3 seconds. It is hoped that this will be fixed in some future edition of Android.

In the interim, consider using AsyncTask to "warm up" SimpleDateFormat in your process before you need it. Just parse some date in the AsyncTask doInBackground() to get it to load the timezones sometime when it will not impact the user so much. Once initialized in your process, SimpleDateFormat will run quickly until your process is terminated.

有一个open issue你可以找到一个解释:

This is due to the lazy initialization of the timezone zone strings. Only the first call will take this long. If the SimpleDateFormat is used again afterwards it's loaded from cache and shouldn't take that long anymore.

Before this was changed it was done when the class was loaded and thus the start of an activity took those 2-3 seconds longer. This had a much worse impact on the user experience than if it takes those seconds when it's actually used the first time. The problem is that there's no way right now to circumvent this issue due to the design of the SimpleDateFormat api. Only faster phones might fix this by just taking less time to collect those strings.

The caching happens in the DateFormatSymbols that SimpleDateFormat is using. By reusing that instance it's possible to only have to load the stings once (for the same loale). You could also create that Instance in a thread at the startup of the activity so that it's already cached once it's used. To init the strings just call .hashCode() which does force initialize the cache. A bit faster but less simple would be to serialize the instance. This also forces the cache to be initialized.

因为这只会在您的函数第一次被调用时发生(由于时区字符串的初始化),我建议(正如他们所说)使用 AsyncTask “预加载”SimpleDateFormat。我认为它会解决您的问题。

关于android - Date.getTime() 在使用西类牙语时需要花费大量时间来处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com