当前位置: 首页 > 面试题库 >

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

阎昌勋
2023-03-14
问题内容

早上好,

我开发了一个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天

以及为什么获得ia十进制结果-我计算每个时间格式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("-->", "====================");


 类似资料:
  • 问题内容: 在我的代码中,日期之间的差异是错误的,因为它应该是38天而不是8天。我该如何解决? 问题答案: 问题出在变量中。月以Capital M表示。 尝试更改为: 有关更多信息,请参见此javadoc。 编辑: 这是代码,如果您想以注释的方式打印差异: 希望对您有所帮助!

  • 假设A有两个日期(开始时间) 例如。 感谢帮助。

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时

  • 我写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别为2017年2月3日和2017年3月3日时,显示的天数为29天。虽然当他们在同一天,它是显示1。(一个人休假的天数。因此,如果一个人休假一天,他必须选择相同的开始和结束日期。因此,在这种情况下,他休假两天)。 我做错了什么?谢谢你抽出时间。 注意:请不要使用日期构造函数。检查下面被接受的答案。使用simpledateformat或Jo

  • 问题内容: 我在-type字段中将上次登录时间存储在MySQL中。当用户登录时,我想获取上次登录时间与当前时间(我使用)之间的时差。 我该如何计算? 问题答案: 使用MySQL函数。例如,您可以使用: 在您的情况下,函数的第三个参数将是当前登录时间()。第二个参数是上次登录时间,该时间已在数据库中。

  • 问题内容: 如何找到两个Joda-Time DateTime实例之间的天数差异?“天数差异”是指如果开始时间是星期一,结束时间是星期二,则无论返回日期和开始时间/结束时间是小时/分钟/秒,我都希望返回值为1。 如果开始时间是晚上,结束时间是上午,则给我0。 我在其他日期字段上也遇到了同样的问题,因此我希望有一种通用的方法可以“忽略”重要性较低的字段。 换句话说,2月至3月4日之间的月份也将为1,而