2日之间的差异日数与智利时间错误? [英] Wrong count of difference days between 2 dates with joda time?

查看:103
本文介绍了2日之间的差异日数与智利时间错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

早上好,

我开发一个Android应用程序,我疯了!
自几天以来,我尽力得到两个日期之间的差异日期。

i developing an android app and i get crazy! since a few days, i try to get the difference days between 2 dates.

我意识到这与joda时间 - 这似乎是有效的。 >

i realize it with joda time - this seems to work.

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。
这是以毫秒为单位的日期选择器的日期。

i save the long sqlDate in my database. this is the date of date picker in milliseconds.

现在我想使用查询请求此日期,并计算以毫秒为单位的日期之间的差异日期和现在的日期。

Now i would like to request this date with an query and calculate the difference days between the date in milliseconds and the date now.

我尝试这样:

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/-->: ====================

但这是错误的。
例如:

But this is wrong. For Example:

这是SqlDate的结果 - now = 2591999577(毫秒)

This is the Result of SqlDate - now = 2591999577 (milliseconds)

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

2591999577 / (24 * 60 * 60 * 1000) = 29,9999 ( 30 days ) NOT 29 Days

为什么得到ia十进制结果 - 我计算每次都是00:00:00到00:00:00

and why get i a decimal result - i calculate every time form 00:00:00 to 00:00:00

我希望你能帮助我:'(

i hope you can help me :'(

推荐答案

你没有毫秒的数量:)

尝试:

    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("-->", "====================");

这篇关于2日之间的差异日数与智利时间错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆