-1

我想使用下面的代码使用 joda Datetime 更改我的 android 应用程序中的日期时间。脚步:

  1. 获取系统当前日期
  2. 设置系统时间
  3. 获取当前日期并检查结果。

运行此应用程序时没有弹出错误。但时间并没有改变。

有什么我想念的吗?我需要在 Manifest.xml 中获得更多权限吗?

请注意,该应用程序将在有根的模拟器上运行。

我的文件如下:

MainActivity.java;

private void settime1(){

        List<String> text = new ArrayList<>();
    DateTime now = DateTime.now();
    Toast.makeText(MainActivity.this,now.toString(), Toast.LENGTH_LONG).show();
    text.add("Now: " + now);
    text.add("Now + 12 hours: " + now.plusHours(12));
    Date currentTime = Calendar.getInstance().getTime();
    Toast.makeText(MainActivity.this, currentTime.toString(), Toast.LENGTH_LONG).show();
    }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.us_bbteam">

构建.gradle

dependencies {
    api 'joda-time:joda-time:2.10.9:no-tzdb'

    implementation "androidx.startup:startup-runtime:1.0.0"
    implementation 'androidx.annotation:annotation:1.1.0'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment:2.3.5'
    implementation 'androidx.navigation:navigation-ui:2.3.5'
    implementation 'com.google.android.things:androidthings:1.0'
    implementation 'net.danlew:android.joda:2.10.9.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
4

1 回答 1

1

java.time.时钟

考虑为您的日期和时间工作使用现代 Java 日期和时间 API java.time。java.time 还提供了一个Clock您可以配置为您提供与实际当前时间不同的时间。

    Clock offsetClock
            = Clock.offset(Clock.systemDefaultZone(), Duration.ofHours(12));
    
    ZonedDateTime offsetNow = ZonedDateTime.now(offsetClock);
    System.out.println(offsetNow);

当我刚刚运行这个时——在我的时区早上 6 点 38 分——我得到了:

2021-09-11T18:38:00.356242+02:00[欧洲/哥本哈根]

如果您需要一个老式Date的 API 对象,而您现在无法升级到 java.time,请Instant从时钟中绘制一个并转换:

    Date offsetOldfashionedDate = Date.from(Instant.now(offsetClock));
    System.out.println(offsetOldfashionedDate);

2021 年 9 月 11 日星期六 18:38:00 CEST

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上,要么使用脱糖,要么使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保您从org.threeten.bp子包中导入日期和时间类。

链接

于 2021-09-11T04:41:37.867 回答