2日之间的差异日数与智利时间错误? [英] Wrong count of difference days between 2 dates with joda time?
问题描述
早上好,
我开发一个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屋!