立即从3年后获取Unix时间戳

时间:2018-11-05 11:56:28

标签: android unix-timestamp android-date

使用Android和Java 8,如何及时恢复unix时间戳?

例如

  • 距离现在正好3年
  • 距离现在正好2个月
  • 距离现在正好1天

我知道我可以使用System.currentTimeMillis() / 1000L获取当前时间戳(您也可以从新的 java.time 使用Instant.now().getEpochSecond(),但这需要Android API> 25)。现在,我需要获取偏移量并减去它。我可以使用TimeUnit.Days.toSeconds(),但如果要减去年份,它没有YEAR单位,我也不想自己弄乱leap年。

有没有简单的方法可以做到这一点?

4 个答案:

答案 0 :(得分:5)

尝试使用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();
  

三年后。

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

注意:-使用负值作为追溯日期。

希望它可以解决您的问题。

答案 1 :(得分:3)

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

如果今天恰好是February年的2月29日,我不确定您会得到什么。大概是三年前2月28日的同一天。如果需要确定,请查阅文档或尝试一下。

几个月或几天前,使用minusMonths的{​​{1}}或minusDays方法。

  

新的 java.time …需要Android API> 25

并非如此:java.time已被反向移植。

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得ThreeTen Backport,即新类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从OffsetDateTime导入日期和时间类。

链接

答案 2 :(得分:0)

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();

    }

答案 3 :(得分:0)

一年前从当前时间获取unix时间戳。

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

一个月...

calendar.add(Calendar.MONTH, -1);