Получите метку времени Unix ровно через 3 года - PullRequest
0 голосов
/ 05 ноября 2018

Как использовать Android и Java 8, как вернуть метки времени unix назад во времени?

* 1003 Е.Г. *

  • Ровно через 3 года
  • Ровно через 2 месяца
  • Ровно 1 день назад
  • и т.д.

Я знаю, что могу получить текущую метку времени, используя System.currentTimeMillis() / 1000L (вы также можете использовать Instant.now().getEpochSecond() из нового java.time , но для этого требуется Android API> 25). Теперь мне нужно получить смещение и вычесть его. Я мог бы использовать TimeUnit.Days.toSeconds(), но если я хочу вычесть годы, у него нет единицы ГОД, и я сам не хочу связываться с високосными годами.

Есть ли простой способ сделать это?

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

java.time и ThreeTenABP

    long threeYearsAgo = OffsetDateTime.now(ZoneOffset.UTC)
            .minusYears(3)
            .toEpochSecond();
    System.out.println("Three years ago: " 
            + NumberFormat.getIntegerInstance().format(threeYearsAgo));

Когда я только что запустил это на своем компьютере, я получил такой вывод:

Три года назад: 1,446,737,905

Я не совсем уверен, что вы получите, если сегодня случится 29 февраля в високосный год; наверное в то же время суток 28 февраля три года назад. Если вам нужно быть уверенным, проверьте документацию или попробуйте.

Для месяцев или дней назад используйте minusMonths или minusDays метод OffsetDateTime.

новый java.time … требует Android API> 25

Не совсем: java.time был портирован.

  • В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 05 ноября 2018

Попробуйте получить временную метку, используя Calender ....

За 2 месяца.

    Calendar date= Calendar.getInstance();
    date.add(Calendar.MONTH, 2);//instead of 2 use -2 value in your case
    date.getTimeInMillis();

За один день.

    Calendar date= Calendar.getInstance();
    date.add(Calendar.DAY_OF_MONTH, 1);//instead of 1 use -1 value in your case
    date.getTimeInMillis();

Через 3 года.

    Calendar date= Calendar.getInstance();
    date.add(Calendar.YEAR, 3);//instead of 3 use -3 value in your case
    date.getTimeInMillis();

Примечание: - Используйте отрицательное значение для дат возврата.

Надеюсь, это решит ваши проблемы.

0 голосов
/ 05 ноября 2018

Получение метки времени unix год назад от текущего времени.

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, -1);
long unixTimestamp = calendar.getTime().getTime() / 1000;

За месяц ...

calendar.add(Calendar.MONTH, -1);
0 голосов
/ 05 ноября 2018
long now = System.currentTimeMillis() - 1000;
setMaxDate(now+(1000*60*60*24*3)   // 3 days from now




 public void showDatedialog() {
        DatePickerDialog dpd = new DatePickerDialog(DeliveryProduct.this,
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        c.set(year, month, day);
                        String date = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
                        edDate.setText(date);
                        mYear = c.get(Calendar.YEAR);
                        mMonth = c.get(Calendar.MONTH);
                        mDay = c.get(Calendar.DAY_OF_MONTH);
                    }
                }, mYear, mMonth, mDay);
        dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

        long now = System.currentTimeMillis() - 1000;

        //dpd.getDatePicker().setMaxDate(now+(1000*60*60*24*3));  //for 3 days from now
        Calendar d = Calendar.getInstance();
        d.add(Calendar.MONTH, 1);
        //  dpd.getDatePicker().setMaxDate(d.getTimeInMillis());
        dpd.show();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...