新的SimpleDateFormat(“ hh:mm a”,Locale.getDefault())。parse(“ 04:30 PM”)给出了不可解析的异常

时间:2018-11-15 06:22:12

标签: java android time simpledateformat datetime-parsing

奇怪的事情在绝望的时候发生。

我在这段代码中遇到了一些奇怪的事情

Date time = new SimpleDateFormat("hh:mm a", Locale.getDefault()).parse("04:30 PM");

正在给予

  

“无法解析的日期:\“ 04:30 PM \”(偏移量为6)“

仅在生产应用(在Google Play商店中)的Android 6.0和Android 6.0.1设备中例外。

PS:我无法在Android 6.0 Emulator和HTC Desire 10 Pro Android 6.0.1上重新生成此错误。 在本地重新生成此错误或如何解决该错误的任何帮助将不胜感激。

编辑:2018年11月15日 出现此异常的设备。

  

操作系统版本:3.4.0-10662519(G900FXXS1CQD8)    操作系统API级别:23    设备:klte    型号(和产品):SM-G900F(kltexx)    制造商:三星    其他标签:释放键    SD卡状态:已安装    http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0.1; SM-G900F Build / MMB29M)

     

操作系统版本:3.10.84(v1AJW-0)    操作系统API级别:23    设备:idol4    型号(和产品):6055K(6055K)    制造商:TCL    其他标签:释放键    SD卡状态:已安装    http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0.1; 6055K Build / MMB29M)

     

操作系统版本:3.10.84-g05b37ae(16293194481ff)    操作系统API级别:23    设备:p1    型号(和产品):LG-H818(p1_global_com)    制造商:LGE    其他标签:释放键    SD卡状态:已安装    http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0; LG-H818 Build / MRA58K)

1 个答案:

答案 0 :(得分:1)

字符串的偏移量6表示PM

这是一个地区问题。 AMPM尽管是从拉丁语衍生而来的,但是用英语而不是其他许多语言来称呼。因此,这些缩写在很多语言环境中都不被认可。在您的代码中,您使用Locale.getDefault(),并且如果它返回的语言不是英语,则很可能会出错。例如,尝试使用Locale.ENGLISH。另外,请确保以正确的格式和语言获得默认语言环境的字符串。

java.time

如果您正在处理应用程序中的时间或日期,并且还需要进行Java 8或更高版本或Android API级别26或更高级别的编程,请使用Date和{{ 1}},一直都有设计问题,尤其是后者通常很麻烦。幸运的是,两者现在都已经过时了,现在已由现代Java日期和时间API java.time取代。因此,请改用此:

SimpleDateFormat

输出:

  

16:30

DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH); LocalTime time = LocalTime.parse("04:30 PM", timeFormatter); System.out.println(time); 是一天中没有日期且没有时区的时间,似乎比老式LocalTime类更适合您的需求。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得ThreeTen Backport,即新类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从Date导入日期和时间类。

链接