当我在IntelliJ中运行时,该测试通过:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String d1s = "11-Dec-2021";
String d2s = "12-Dec-2021";
Date d1 = formatter.parse(d1s);
Date d2 = formatter.parse(d2s);
但是,当我将'运行测试使用:'设置从Intellij IDEA更改为Gradle时,它失败了。
DeleteCommandTest > deleteExpense() FAILED
java.text.ParseException: Unparseable date: "11-Dec-2021"
at java.base/java.text.DateFormat.parse(DateFormat.java: 395)
at seedu.duke.command.DeleteCommandTest.deleteExpense(DeleteCommandTest.java:22)
我如何解决这个问题,为什么会发生这种情况?
原因是月模式MMM
的地区敏感性。来自API文档:
SimpleDateFormat
是以语言环境敏感的方式格式化和解析日期的具体类。
月12
在英语地区是Dec
,在德语地区是Dez
,在法语地区是Déc
。似乎IntelliJ和Gradle在不同的语言环境设置下运行。您的问题的解决方案是使用期望的区域设置构造SimpleDateFormat
:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);