为了账号安全,请及时绑定邮箱和手机立即绑定

Android:如何从现在到下周星期一凌晨 3 点以秒为单位获得时间?

Android:如何从现在到下周星期一凌晨 3 点以秒为单位获得时间?

FFIVE 2021-10-28 17:17:56
我目前正在尝试在我的 android 应用程序中创建一个 firebase JobDispatcher,它将在星期一凌晨 3 点左右开始工作,无论工作何时创建。我已经看到使用 Joda-Time、Period 类和 TemporalAdjusters 的示例,但我正在尝试支持 API 级别 16 及更高级别,因此我需要一些可以使用这些的东西。目前我正在构建一个具有以下约束的新工作(除其他外) .setTrigger(Trigger.executionWindow(secondsUntilMonday, secondsUntilMonday + toleranceInterval))但是我似乎找不到任何示例说明如何将我的 secondsUntilMonday 设置为调用该方法时与下一次周一凌晨 3 点左右之间的秒数。请帮忙!
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

时间

    ZoneId here = ZoneId.of("America/Danmarkshavn");

    ZonedDateTime now = ZonedDateTime.now(here);

    ZonedDateTime nextMondayAtThree = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY))

            .with(LocalTime.of(3, 0));

    long secondsUntilMonday = ChronoUnit.SECONDS.between(now, nextMondayAtThree);

    System.out.println(nextMondayAtThree);

    System.out.println("Seconds: " + secondsUntilMonday);

请替换您的时区,因为它可能不是美国/丹麦港。

我还邀请您不仅要比较行数,还要比较使用过时Calendar类的答案与阅读的难易程度(不要误解我:如果您想使用Calendar该类,那将是一个很好的答案;我只是不要认为您Calendar在比较时会想要使用该类)。

问题:我可以java.time在 Android API 级别 16 及更高级别上使用吗?

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

  • 在 Java 8 及更高版本以及新的 Android 设备上(有人告诉我,从 API 级别 26 开始)新的 API 是内置的。

  • 在 Java 6 和 7 中获得 ThreeTen Backport,新类的后向移植(ThreeTen for JSR 310,现代 API 在此处首次被描述)。

  • 在(较旧的)Android 上,使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。确保从包org.threeten.bp和子包中导入日期和时间类。


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信