This question already has answers here:
How can I convert a Unix timestamp to DateTime and vice versa?
                                
                                    (18个回答)
                                
                        
                                3年前关闭。
            
                    
我需要计算一个有效期差异。

我会得到这个时代的时间:


  1481410800(2016年12月6日(14:42))


现在我想计算到到期日期的天数(1481410800)

Calendar now = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy (HH:mm)", Locale.getDefault());


//Expiry Date
        long unixSecondsExpiry = 1481410800; //unixSeconds
        Date expiryDate = new Date(unixSecondsExpiry*1000L);



        long currentDate = now.get(Calendar.SECOND);

        long diff = unixSecondsExpiry - currentDate;
        long days = diff / (24l * 60l * 60l * 1000l);




        String formattedExpiryDate = sdf.format(expiryDate);
        String formattedDateNow = sdf.format(new Date());

        Log.w("RUNTEST", "formattedDateNow: " + formattedDateNow);
        Log.w("RUNTEST", "formattedExpiryDate: " + formattedExpiryDate);
        Log.w("RUNTEST", "days: " + days);


我不断获得17天,但应该到到期为止还有5天。


  RUNTEST:formattedDateNow:2016年12月6日(14:42)
  
  RUNTEST:formattedExpiryDate:2016年12月11日(07:00)
  
  RUNTEST:天数:17

最佳答案

在这里,您使用的是new Date()

String formattedDateNow = sdf.format(new Date());


但计算使用

long currentDate = now.get(Calendar.SECOND);


为什么不只是使用

long currentDate = new Date().getTime ();


编辑

从日历中get设置SECONDS只是获取当前的秒计数器


  get和set的字段号指示分钟内的秒。
  例如,在10:04:15.250 PM,秒是15。

10-06 02:12