微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-2个日期与Joda时间之间的差值天数错误?

早上好,

我开发了一个android应用程序,我疯了!
由于几天,我试图得到2个日期之间的差异天.

我在乔达时间就意识到了-这似乎行得通.

DatePicker datepicker = (DatePicker) findViewById(R.id.Picker);

                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR, datepicker.getYear());
                cal.set(Calendar.MONTH, datepicker.getMonth());
                cal.set(Calendar.DATE, datepicker.getDayOfMonth());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                long sqlDate = cal.getTimeInMillis();



                Calendar calToday = Calendar.getInstance();
                calToday.set(Calendar.YEAR, calToday.get(Calendar.YEAR));
                calToday.set(Calendar.MONTH, calToday.get(Calendar.MONTH));
                calToday.set(Calendar.DATE, calToday.get(Calendar.DATE));
                calToday.set(Calendar.HOUR_OF_DAY, 0);
                calToday.set(Calendar.MINUTE, 0);
                calToday.set(Calendar.SECOND, 0);



                Date date1 = new Date(
                        datePicker.getYear()-1900,
                        datePicker.getMonth(),
                        datePicker.getDayOfMonth()
                );



                Date today = new Date(
                        calToday.get(Calendar.YEAR)-1900,
                        calToday.get(Calendar.MONTH),
                        calToday.get(Calendar.DAY_OF_MONTH)
                );



                int days = Days.daysBetween(new DateTime(today), new DateTime(date1)).getDays();

我将长sqlDate保存在数据库中.
这是日期选择器的日期(以毫秒为单位).

现在,我想通过查询请求此日期,并计算以毫秒为单位的日期与现在的日期之间的时差天数.

我试试这个:

Calendar calToday = Calendar.getInstance();
                calToday.set(Calendar.YEAR, calToday.get(Calendar.YEAR));
                calToday.set(Calendar.MONTH, calToday.get(Calendar.MONTH));
                calToday.set(Calendar.DATE, calToday.get(Calendar.DATE));
                calToday.set(Calendar.HOUR_OF_DAY, 0);
                calToday.set(Calendar.MINUTE, 0);
                calToday.set(Calendar.SECOND, 0);
                long Now = calToday.getTimeInMillis();
                long DiffDays = (sqlDate - Now) / (24 * 60 * 60 * 1000);


                Log.e("-->", ""+sqlDate );
                Log.e("-->", ""+Now);
                Log.e("-->", ""+(sqlDate - Now));
                Log.e("-->", ""+DiffDays);
                Log.e("-->", "====================");

记录结果:

12-02 07:19:09.931 26600-26600/? E/-->: 1451606400515
12-02 07:19:09.931 26600-26600/? E/-->: 1449014400938
12-02 07:19:09.931 26600-26600/? E/-->: 2591999577
12-02 07:19:09.931 26600-26600/? E/-->: 29
12-02 07:19:09.931 26600-26600/? E/-->: ====================
12-02 07:19:09.931 26600-26600/? E/-->: 1449187200127
12-02 07:19:09.931 26600-26600/? E/-->: 1449014400942
12-02 07:19:09.931 26600-26600/? E/-->: 172799185
12-02 07:19:09.931 26600-26600/? E/-->: 1
12-02 07:19:09.931 26600-26600/? E/-->: ====================

但这是错误的.
例如:

这是sqlDate的结果-现在= 2591999577(毫秒)

2591999577 /(24 * 60 * 60 * 1000)= 29,9999(30天)
不是29天

以及为什么得到十进制结果-我计算每个时间格式00:00:00到00:00:00

我希望你能帮帮我 :'(

解决方法:

您没有将毫秒清零:)

尝试:

    Calendar calToday = Calendar.getInstance();
    calToday.set(Calendar.YEAR, calToday.get(Calendar.YEAR));
    calToday.set(Calendar.MONTH, calToday.get(Calendar.MONTH));
    calToday.set(Calendar.DATE, calToday.get(Calendar.DATE));
    calToday.set(Calendar.HOUR_OF_DAY, 0);
    calToday.set(Calendar.MINUTE, 0);
    calToday.set(Calendar.SECOND, 0);
    calToday.set(Calendar.MILLISECOND, 0); // this is important
    long Now = calToday.getTimeInMillis();
    long DiffDays = (sqlDate - Now) / (24 * 60 * 60 * 1000);
    Log.e("-->", ""+sqlDate );
    Log.e("-->", ""+Now);
    Log.e("-->", ""+(sqlDate - Now));
    Log.e("-->", ""+DiffDays);
    Log.e("-->", "====================");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。