【问题标题】:Joda Time on Android not computing correctlyAndroid 上的 Joda Time 无法正确计算
【发布时间】:2013-09-19 01:03:40
【问题描述】:

因此,我正在尝试计算两个日期之间的时间差,并以天、小时和分钟为单位输出差异。我一直在运行这个示例代码,就像一个 java 控制台应用程序一样,它工作正常,但是,当我尝试在 Android 中做同样的事情时,我得到了垃圾数据。 Joda Time 对 Android 来说太复杂了吗?我应该尝试使用 Date4j 作为替代方案吗?

import java.util.; import org.joda.;
import org.joda.time.DateTime;

public class time {

        //(5000);
        final static long MILLIS_IN_DAY = 86400000;
        final static long MILLIS_IN_HOUR = 3600000;
        final static long MILLIS_IN_MINUTE = 60000;

    public static void main(String[] args){

        long day, hour, minute;

        //MAKE SURE TO CHECK IF USER SET(LATER)
        // DateTime(2013,9,12,0,0)
                DateTime d1 = new DateTime(2013,9,17,0,0);
                DateTime d2 = new DateTime(2013,9,12,21,30);


                //long date = d2.getMillis();

                DateTime d3 = new DateTime();

                long diffInMillis = d3.getMillis() - d1.getMillis();
                minute = (diffInMillis/MILLIS_IN_MINUTE)%60;
                hour = (diffInMillis/MILLIS_IN_HOUR)%24;
                day = (diffInMillis/MILLIS_IN_DAY);


                System.out.println(Long.toString(d1.getMillis()));
                System.out.println(Long.toString(d2.getMillis()));  

                System.out.println(Long.toString(d3.getMillis()));

                System.out.println(Long.toString(diffInMillis));

                System.out.println("Minutes:");
                System.out.println(Long.toString(minute));
                System.out.println("Hours:");
                System.out.println(Long.toString(hour));
                System.out.println("Days:");
                System.out.println(Long.toString(day));
    }
    }

【问题讨论】:

  • Is Joda Time too complex for Android? 这是什么意思?
  • 定义“垃圾数据”,这有点太不具体了。 (即发布预期和实际结果)

标签: android datetime jodatime


【解决方案1】:

不要手动计算这些值。用 Joda-Time 方法计算。没有理由使用Joda,也不要使用Joda的方法
例如
DaysHoursMintes

    System.out.println("Minutes:");
    System.out.println(Minutes.minutesBetween(d2, d1).getMinutes() % 60);
    System.out.println("Hours:");
    System.out.println(Hours.hoursBetween(d2, d1).getHours() % 24);
    System.out.println("Days:");
    System.out.println(Days.daysBetween(d2, d1).getDays());  

Period

    Period period = new Period(d2, d1);
    System.out.println("Minutes:");
    System.out.println(period.getMinutes());
    System.out.println("Hours:");
    System.out.println(period.getHours());
    System.out.println("Days:");
    System.out.println(period.getDays());

【讨论】:

  • 我不知道 Period 类,谢谢。我用了它,结果计算得更好。然而,对于任何未来的读者,我确实发现了 getDays() 方法的一个问题,它会返回 0、1、2、3、4、5、6,但不会再返回任何东西。由于我试图获得总天数的总和,这就是我最终要做的事情:Period p1 = new Period(quitDate1,d1.getMillis()); long s = d1.getMillis() - quitDate1; float x = (float)s/MILLIS_IN_DAY; day = (int)x; minute = p1.getMinutes(); hour = p1.getHours();
猜你喜欢
  • 2017-03-06
  • 2011-04-11
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多