当前位置: 首页 > 面试题库 >

Android Android早期Java 8之前的ZonedDateTime到Date

越狐若
2023-03-14
问题内容

我试图替换该ZonedDateTime.toInstant方法,因为该方法仅适用于Android的API 26。
但是我的应用程序应该支持
API19 。我想将ZonedDateTime转换为Date,以便执行以下操作:

final Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
final long millis = calendar.getTimeInMillis();

我要实现的目标如下:
我想计算当前日期与另一个日期之间的时差(以秒,分钟,小时为单位),以可能的最高单位获胜,因此我将得到例如5 days ago结果。


问题答案:

解决方案(ThreeTen-Backport库):
运行良好,我已经在KitKat模拟器上进行了尝试。

private static final ChronoUnit[] chronoUnits = {ChronoUnit.YEARS, ChronoUnit.MONTHS, ChronoUnit.DAYS, ChronoUnit.HOURS, ChronoUnit.MINUTES, ChronoUnit.SECONDS};
private static final Map<ChronoUnit, Integer> chronoUnitPluralIdMap = new HashMap<ChronoUnit, Integer>() {{
    put(ChronoUnit.YEARS, R.plurals.chrono_unit_years_ago);
    put(ChronoUnit.MONTHS, R.plurals.chrono_unit_months_ago);
    put(ChronoUnit.DAYS, R.plurals.chrono_unit_days_ago);
    put(ChronoUnit.HOURS, R.plurals.chrono_unit_hours_ago);
    put(ChronoUnit.MINUTES, R.plurals.chrono_unit_minutes_ago);
    put(ChronoUnit.SECONDS, R.plurals.chrono_unit_seconds_ago);
}};

public static String getTimeStringUntilNowFromUTC(Context context, String utcDate) {
    Instant now = Instant.now(Clock.systemUTC());
    Instant then = Instant.parse(utcDate);
    for (ChronoUnit chronoUnit : chronoUnits) {
        if (then.isSupported(chronoUnit)) {
            long units = chronoUnit.between(then, now);
            if (units > 0) {
                //noinspection ConstantConditions
                return context.getResources().getQuantityString(chronoUnitPluralIdMap.get(chronoUnit), (int)units, (int)units);
            }
        }
    }
    return "-";
}

public static String getTimeBetweenTwoDates(Context context, String date1, String date2) {
    Instant date1Instant = Instant.parse(date1);
    Instant date2Instant = Instant.parse(date2);
    final long seconds = ChronoUnit.SECONDS.between(date1Instant, date2Instant);
    return getMinutesSecondsString(context, seconds);
}


 类似资料:
  • 我正在尝试编写一个方法来打印两个ZonedDateTimes之间的时间差,关于时区之间的差异。 我找到了一些解决方案,但它们都是为使用LocalDateTime而编写的。

  • 因此,我希望这段代码能够在新的Java8date/time包下工作,因为它所做的只是将给定的ZonedDateTime转换成字符串,然后使用相同的内置DateTimeFormatter实例(ISO_INSTANT)返回: 但显然不是: 我已经看到了这个条目,但它对我没有帮助,因为a需要一个ZonedDateTime对象,而不是本地对象,还因为我已经安装了8U20:无法使用DateTimeForma

  • 我是java.time包的新手。我有一个本地日期是2015-12-10。我需要将此转换为ZonedDateTime。时间应该是00:00:00,区域是zoneoffset.utc。 dateTimeException:无法从java.time.localDate类型的TemporalAccessor:2015-12-10获取Instant 我也试过: 这会产生意想不到的结果。 我查看了API并尝试

  • 我使用Java8的ZonedDateTime和DateTimeFormatter。当我试图解析自己的模式时,它无法识别并抛出异常。

  • STS 4网站发布链接,在其网站上下载最新版本的IDE。我们如何下载STS的早期版本? 我希望下载4.3,因为它支持kotlin。 PS:我正在寻找导入spring框架代码到eclipse(STS)

  • 我有一套和一个方法: 我可以终止lambda内部的forEach吗(使用或不使用异常)?我应该使用匿名类吗? 我可以这样做: 我正在寻找最快的解决方案,所以异常和一个'real'为每个循环是可以接受的,如果他们是足够快的。