【问题标题】:Subtracting two times in Android/Java在 Android/Java 中进行两次减法
【发布时间】:2012-11-13 11:22:39
【问题描述】:

我使用此代码获得开始时间:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
            String start_time = sdf.format(cal.getTime());

我使用此代码得到一个结束时间:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
            String end_time = sdf.format(cal.getTime());

我想知道经过的时间,所以像start_time - endtime = elapsed_time 这样的东西会很好,但似乎不可能。我仍然不擅长理解对象,但我想由于字符串是对象,我不能轻易得到经过的时间。除了将elapsed_time 作为字符串之外,还有什么简单的方法可以做到这一点?

【问题讨论】:

    标签: java android time simpledateformat


    【解决方案1】:

    在这种情况下,您的最佳选择可能是 Joda Time:http://joda-time.sourceforge.net/ 它有一个 Interval 类和一个 Duration 类,两者都可以用来测量时间差。 Interval 有一个 ReadableDuration,而后者又有一个 toString 方法来格式化它。

    来自 Joda Time 文档:

    // interval from start to end
    DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
    DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
    Interval interval = new Interval(start, end);
    

    【讨论】:

    • 虽然确实应该是一个评论,除非你展示如何使用 joda-time ...
    • 添加了一些说明,这是否解决了您对@NimChimpsky 的担忧?
    • 为此使用单独的库有点奇怪,因为 Android/Java 默认支持日期减法。
    • 没那么奇怪,joda time 总是很棒,我总是首先添加到项目中
    【解决方案2】:

    如果你想拥有:

    • calBegin = 日历设置为开始时间
    • calEnd = 日历设置为结束时间

    然后你可以使用类似的东西:

    long elapsedMs = calEnd.getTime().getTime() - calBegin.getTime().getTime();
    

    其中 elapsedMs = 开始和结束之间经过的毫秒数

    【讨论】:

      【解决方案3】:
       Date elapsed= new Date(sdf.parse(end_time).getTime() - sdf.parse(start_time).getTime());
              System.out.println(sdf.format(elapsed));
      
      1. 将您的开始和时间时间转换为长类型。
      2. 做减法。
      3. 将得到的结果转换为java.util.Date对象
      4. 使用 SimpledateFormat 格式化以获取特定格式的结果

      【讨论】:

        【解决方案4】:

        对于string,这是不可能的。您应该使用Date 对象:

        如果calCalendar

        Date start_date = cal.getTime();
        //change to calendar to other date
        Date end_date = cal.getTime();
        long total_time = end_date.getTime() - start_date.getTime();
        

        如果cal 是返回String 的自定义对象之类的其他东西:

        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
        Date start_date = sdf.parse(cal.getTime(), 0);
        Date end_date = sdf.parse(cal.getTime(), 0);
        
        long total_time = end_date.getTime() - start_date.getTime();
        

        total_time 是以毫秒为单位的总时间

        【讨论】:

        • 需要哪些进口?日期还是 sql?我猜日期,但只是确定。
        • 我正在尝试这个,但我在解析下得到一条红线。
        • 还有一个参数需要,见developer.android.com/reference/java/text/…, java.text.ParsePosition)
        猜你喜欢
        • 2015-03-08
        • 2011-03-31
        • 2013-09-30
        • 2011-07-12
        • 1970-01-01
        • 2018-05-21
        • 2017-03-05
        • 1970-01-01
        相关资源
        最近更新 更多