50

Android プロジェクトに ThreeTen-Backport ライブラリを使用しています (Android 開発では java.time がまだ実装されていないため)。

私が書いLocalDate today=LocalDate.now();たりLocalTime time=LocalTime.now();、次の例外を受け取ったりすると:

Caused by: 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.LocalDate.now(LocalDate.java:165)

同じコード行は、ネイティブの java.time ライブラリを使用する別の Java プロジェクトでもうまく機能します。

考えられる解決策を探しましたが、役立つものは見つかりませんでした。ある解決策では、タイム ゾーン ルールを含む別の jar を使用する必要があることが示唆され、別の解決策では、クラスパス内に 2 つ以上の ThreeTenBP ライブラリが存在する可能性があることが示唆されました。
それらのケースは私のケースと一致しません。

ファイル内build.gradleの依存関係セクションで、いくつかの構成を試しました。

  • 最初に、私は使用しました -compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
  • それから、私は試しました - compile 'org.threeten:threetenbp:1.0.3'
  • その後、試してみました- compile 'org.threeten:threetenbp:1.3.1'
  • 現在、私は使用していますcompile 'org.threeten:threetenbp:1.3.2'

そのコード行の何が問題なのか、それを修正する方法がわかりません。メソッドとメソッド
は、タイム ゾーンを指定しなくても機能するはずです。LocalDate.now()LocalTime.now()

4

5 に答える 5

0

API 25 を使用していたとき、java.timeが機能しませんでした。Jake Wharton の threetenadp を使用しました。そのため、Studio 2020.3.1 で使用するためのわずかな更新があります。

モジュール build.gradle で

dependencies {
 implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1'
}

import com.jakewharton.threetenabp.AndroidThreeTen

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    AndroidThreeTen.init(application);

IDE でインポートを求められたら、 java.timeではなく、com.jakewharton.threetenabp.AndroidThreeTenを選択してください。

LocalTime.now().toSecondOfDay() は私が必要としていたものです。

于 2021-11-04T01:10:07.117 に答える