我刚刚发现这个库可以在 Android 上使用 Java 8 中的 java.time。在我的 TimePickerDialog 中,我要求一个时间,然后我必须向服务器发送一个 HTTP 请求,其中包含一个 Date 对象(来自对话框的时间),格式如下:"YYYY-MM-DDTHH:MM:SS+HH:MM"
我开始尝试使用通常的类(日历, Date, SimpleDateFormat),但过了一段时间我放弃并寻找更干净的解决方案,并找到了Java 8 中的ZonedDateTime 类。它看起来正是我想要使用的类,但是当我尝试使用它创建一个实例时ZonedDateTime.now(),我得到以下堆栈跟踪:
org.threeten.bp.zone.ZoneRulesException: No time-zone data files registered
at org.threeten.bp.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:176)
at org.threeten.bp.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:133)
at org.threeten.bp.ZoneRegion.ofId(ZoneRegion.java:143)
at org.threeten.bp.ZoneId.of(ZoneId.java:357)
at org.threeten.bp.ZoneId.of(ZoneId.java:285)
at org.threeten.bp.ZoneId.systemDefault(ZoneId.java:244)
at org.threeten.bp.Clock.systemDefaultZone(Clock.java:137)
at org.threeten.bp.ZonedDateTime.now(ZonedDateTime.java:168)
at eu.arrowhead.arrowheaddemo.ReservationsActivity.onTimeSet(ReservationsActivity.java:162)
at eu.arrowhead.arrowheaddemo.TimePickerFragment.onTimeSet(TimePickerFragment.java:56)
at android.app.TimePickerDialog.onClick(TimePickerDialog.java:141)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:164)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我AndroidThreeTen.init(this);
按照我的应用程序类(onCreate)中的文档做了,所以我不知道是什么导致了问题。
额外的问题:一旦我让它工作并且我想在 ZonedDateTime 对象中发送日期,我如何将它转换为简单的java.util.Date
?非常感谢您提前。
编辑:初始化证明:
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
AndroidThreeTen.init(this);
}
}
顺便说一句,API 级别是 24。