如何防止java.util.Date.toString崩溃?

时间:2018-08-14 15:38:28

标签: java android

有时,以下代码会导致Android应用崩溃:

try {
    (new Date()).toString());
} catch (Exception ex) {
    ...
}

堆栈跟踪:

java.lang.AssertionError: 
  at android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex (TimeZoneNamesImpl.java:724)
  at android.icu.impl.TimeZoneNamesImpl$ZNames.getName (TimeZoneNamesImpl.java:790)
  at android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName (TimeZoneNamesImpl.java:183)
  at android.icu.text.TimeZoneNames.getDisplayName (TimeZoneNames.java:261)
  at java.util.TimeZone.getDisplayName (TimeZone.java:405)
  at java.util.Date.toString (Date.java:1066)

显然,该错误无法捕获。有办法防止这种情况吗?

2 个答案:

答案 0 :(得分:2)

如果您使用 new Date()收到了AssertionError,这似乎很奇怪,并且可能与 Android 8 问题(而非代码)有关,则可以使用 Java 8 >> java.time 代替 java.util.Date ,如下所示:

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy/MM/dd HH:mm:ss")
    .withZone(ZoneId.systemDefault()); //you must add time zone because of Instant

Instant currentTimestamp = Instant.now();

System.out.print(formatter.format(currentTimestamp));          

答案 1 :(得分:1)

非常奇怪的问题...

顺便说一句,没有引发异常,而是从Select Case x Case 1 'case 1 code Case 2 'case 2 code Case 3 'case 3 code Case 4 'case 4 code Case 5 'case 5 code Case9Code() Case 6 'case 6 code Case 7 'case 7 code Case 8 'case 8 code Case 9 Case9Code() End Select. 延伸过来的AssertionError

您可以使用:

Error