- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过解析字符串日期来获取 java.util.Date
对象:“2017-06-28 08:30 AM”。我的 Android 应用程序中使用了此解析。这在许多 Android
版本中都没有任何解析异常。像 7.0、4.4.2 和 5.1。但这在 Android
6.0 中不起作用。
这是我的错误日志和SimpleDateFormat
,
W/System.err: java.text.ParseException: Unparseable date: "2017-06-28 08:30 AM" (at offset 17)
at java.text.DateFormat.parse(DateFormat.java:579)
at biz.spsolutions.peopleedge.RosterClockInActivity.setData(RosterClockInActivity.java:531)
at biz.spsolutions.peopleedge.RosterClockInActivity.onCreate(RosterClockInActivity.java:391)
at android.app.Activity.performCreate(Activity.java:6877)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3208)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3351)
at android.app.ActivityThread.access$1100(ActivityThread.java:222)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1796)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
这是我的SimpleDateFormat
,
SimpleDateFormat currentFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a")
我也试过这种格式,
SimpleDateFormat currentFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm aaa")
我该如何处理这个异常?有什么想法吗?
最佳答案
使用现代 java.time 类时没问题。
LocalDateTime.parse(
"2017-06-28 08:30 AM" ,
DateTimeFormatter.ofPattern( "uuuu-MM-dd hh:mm a" , Locale.US )
)
2017-06-28T08:30
您正在使用麻烦的旧日期时间类,这些类现在已成为遗留问题,已被 java.time 类取代。对于 Android,请参阅下面的最后一个项目符号。
请注意,我将 Locale.US
指定为格式化程序的一部分。语言环境决定了用于确定大写等问题的文化规范。我怀疑您的 JVM 当前默认设置可能设置为期望“AM/PM”为小写的语言环境。始终指定预期/所需的语言环境,而不是隐式依赖当前默认语言环境,该语言环境可以随时通过 JVM 应用程序中的任何代码更改。有关详细信息,请参阅 other Question .
String input = "2017-06-28 08:30 AM" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd hh:mm a" , Locale.US ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
查看此 code run live at IdeOne.com .
ldt.toString(): 2017-06-28T08:30
java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date
, Calendar
, & SimpleDateFormat
.
Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。
要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .
从哪里获得 java.time 类?
关于Java : DATE_EXCEPTION Unparseable date : "2017-06-28 08:30 AM" (at offset 17),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793506/
我想通过解析字符串日期来获取 java.util.Date 对象:“2017-06-28 08:30 AM”。我的 Android 应用程序中使用了此解析。这在许多 Android 版本中都没有任何解
我是一名优秀的程序员,十分优秀!