当我使用带有“YYYY”的SimpleDateFormat类时应用程序崩溃

时间:2018-05-29 12:18:58

标签: java android simpledateformat

我正在使用SimpleDateFormat类来获得像这样的当前年份

SimpleDateFormat currentYear = new SimpleDateFormat("YYYY");
Date thisYear = new Date();
String stringThisYear  = currentYear .format(thisYear );

它在这里工作得很好(印度),但它在其他人在马来西亚运行时崩溃了。经过大量的调试和搜索后,我发现由于没有提到locale而发生了。所以我改变了我的代码到这个

SimpleDateFormat currentDate = new SimpleDateFormat("YYYY", Locale.ENGLISH);

仍然是崩溃,所以我使用日历实例来获得这样的当前年份

 int thisYear=Calendar.getInstance().get(Calendar.YEAR);

但是我想知道simpleDateFormat有什么问题,因为我的大部分代码已经有了simpleDateFormat类。所以我想知道崩溃的原因,如果有人有解决方案,请帮帮我。谢谢你

3 个答案:

答案 0 :(得分:5)

这是因为你必须使用“yyyy”而不是“YYYY”

在旧版Android上,使用“YYYY”会让您的应用崩溃。与国家/地区相关无关

“Y”表示指定in the Javadoc

的周年而非年份

编辑2

更多information here

  

yyyy是用于标识年份的模式字符串   SimpleDateFormat类。

     

Java 7引入了YYYY作为标识日期周的新日期模式   年。

     

平均年份正好是52.1775周,这意味着   最终一年可能要考虑52周或53周   不可分割的几周。

     

格式化日期时无意中使用YYYY会导致严重   Java应用程序中的问题。

如@ OleV.V。所述,格式Y仅在Android API 24+上受支持。使用API​​ 24以下的任何版本会使应用程序崩溃。

答案 1 :(得分:0)

尝试使用此设备的默认语言环境

SimpleDateFormat currentDate = new SimpleDateFormat("YYYY", Locale.getDefault());

答案 2 :(得分:0)

我正面临同样的问题,使用它工作正常。

 SimpleDateFormat formatter = new SimpleDateFormat("YYYY",Locale.US);