【问题标题】:Java calendar retunrning wrong time in milliseconds AndroidJava日历以毫秒为单位返回错误时间Android
【发布时间】:2021-01-04 17:28:16
【问题描述】:

在一个 android 应用程序中,我有倒数计时器来显示游戏中的剩余时间。它工作正常,但是当我出于某种原因想要以毫秒为单位时,它总是给我整整一分钟。

为了解释,我在数据库中有时间,我从它减去当前时间,但它总是给我整数,总是整分钟,所以我的秒数永远不会好。这是代码

setTimeLeftInMilliseconds(calendarEnd.getTimeInMillis() - Calendar.getInstance().getTimeInMillis());

calendarEnd 总是一样的,但我想知道还剩多少时间。

示例输出: 429780000 429780000 429780000

这都是同一分钟,但我没有秒数

【问题讨论】:

    标签: java android android-studio time calendar


    【解决方案1】:

    很简单:

    Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
    Instant end = Instant.parse("2017-10-03T10:16:30.00Z");
            
    Duration duration = Duration.between(start, end);
    

    【讨论】:

      【解决方案2】:

      tl;博士

      java.time.Duration.between( 
          Instant.ofEpochMilli( then ) , 
          Instant.now() 
      )
      

      java.time

      您正在使用被现代 java.time 类取代的糟糕的日期时间类。

      显然,您希望使用自 1970 年 UTC 第一时刻的纪元参考点 1970-01-01T00:00Z 以来的毫秒数。为此,请使用Instant 类。

      long now = Instant.now().toEpochMilli() ;
      

      以毫秒为单位计算经过的时间。

      long elapsed = ( now - then ) ;
      

      最好使用Instant 对象来确定Duration

      Duration elapsed = Duration.between( Instant.ofEpochMilli( then ) , Instant.now() ) ;
      

      您可以要求整个持续时间以毫秒为单位。

      long elapsedMillis = elapsed.toMillis() ;
      

      【讨论】:

        【解决方案3】:

        我不确定这是否是正确的逻辑。减去两个 Long 值,在这种情况下,以毫秒为单位的时间,不是你应该做的。可以选择以秒、分钟等形式查找两个日期之间的差异。使用它来显示您的剩余时间。

        检查此代码,您可以简化它,因为您不必使用此处的所有内容:

        DateTimeUtils obj = new DateTimeUtils();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy hh:mm:ss");
        
        try {
            Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10");
            Date date2 = simpleDateFormat.parse("13/10/2013 20:35:55");
        
            obj.printDifference(date1, date2);
        
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        //1 minute = 60 seconds
        //1 hour = 60 x 60 = 3600
        //1 day = 3600 x 24 = 86400
        public void printDifference(Date startDate, Date endDate) { 
            //milliseconds
            long different = endDate.getTime() - startDate.getTime();
        
            System.out.println("startDate : " + startDate);
            System.out.println("endDate : "+ endDate);
            System.out.println("different : " + different);
        
            long secondsInMilli = 1000;
            long minutesInMilli = secondsInMilli * 60;
            long hoursInMilli = minutesInMilli * 60;
            long daysInMilli = hoursInMilli * 24;
        
            long elapsedDays = different / daysInMilli;
            different = different % daysInMilli;
        
            long elapsedHours = different / hoursInMilli;
            different = different % hoursInMilli;
        
            long elapsedMinutes = different / minutesInMilli;
            different = different % minutesInMilli;
        
            long elapsedSeconds = different / secondsInMilli;
        
            System.out.printf(
                "%d days, %d hours, %d minutes, %d seconds%n", 
                elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);
        }
        

        输出:

        startDate : Thu Oct 10 11:30:10 SGT 2013
        endDate : Sun Oct 13 20:35:55 SGT 2013
        different : 291945000
        3 days, 9 hours, 5 minutes, 45 seconds
        

        要获取您的日期,您可以简单地使用

        Date endDate = simpleDateFormat.format(new Date(calendarEnd.getTimeInMillis()));
        Date currentDate = simpleDateFormat.format(new Date(Calendar.getInstance().getTimeInMillis()));
        

        【讨论】:

        猜你喜欢
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 2012-10-05
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多