ZonedDateTime hasta la fecha antes de Java 8 a principios de Android

manuelwaldner :

Estoy tratando de reemplazar el ZonedDateTime.toInstantmétodo, ya que sólo está disponible desde el 26 API para Android.
Pero mi aplicación se supone que la API de soporte 19.
Quiero convertir el ZonedDateTime a una fecha para que pueda hacer algo como esto:

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

Lo que quiero lograr es la siguiente:
Quiero calcular la diferencia entre la fecha actual y otra fecha en segundos, minutos, horas, ... la más alta gana unidad posibles, por lo que obtendría por ejemplo, 5 days agocomo consecuencia de ello.

manuelwaldner :

Solución (ThreeTen-Backport Biblioteca):
Está funcionando perfectamente, yo ya lo probó en un emulador 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);
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=183837&siteId=1
Recomendado
Clasificación