【发布时间】:2014-07-03 15:59:17
【问题描述】:
我正在尝试建立一种机制来计算两个日期对象之间的差异,但我遇到了问题。 我将转换为 Date 对象的第一个输入是:
Ma 14:00
这意味着“星期一 14:00”。我正在使用以下代码将此字符串转换为日期对象。
try {
date = new SimpleDateFormat("EE HH:mm", Locale.getDefault()).parse(msg);
Log.i("intent", "Date: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
如果我打印 Date 对象,它是“Mon Jan 05 14:00:00 CET 1970”。我只对日期名称和时间感兴趣,所以我没有费心更改日期对象的其他部分。
我的问题如下:我需要知道现在的日子(例如:星期四)和上面的日子(例如:星期一)之间的区别。
我尝试执行以下操作:
Date dateNow = new Date();
dateNow.setHours(date.getHours());
dateNow.setMinutes(date.getMinutes());
dateNow.setSeconds(date.getSeconds());
dateNow.setYear(70);
dateNow.setMonth(0);
Log.i("DAYS TAG", ""+dateNow);
long diff = date.getTime() - dateNow.getTime();
long seconds = diff / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
Log.i("DAYS TAG", ""+days);
这种方法行不通,因为我正在处理这些日子,但日子是负数或有时不准确。
基本上我想要的是这样的:
- 获取即将到来的日期的日期(与星期一一样)
- 获取当前日期(星期四)
- 计算这几天(4 天)之间的差异
通过这些步骤,我发现了这个:
Calendar now = Calendar.getInstance();
int weekday = now.get(Calendar.DAY_OF_WEEK);
if(weekday != Calendar.MONDAY){
int days = (Calendar.SATURDAY - weekday + 2) %7;
now.add(Calendar.DAY_OF_YEAR, days);
}
这将获取即将到来的星期一的日期。就像我在第一步中想要的那样。但是,当我添加旧日期时,它不再起作用。它给出了错误的日期。更新后的代码是:
//get difference in days between now and date object.
Calendar old = Calendar.getInstance();
old.setTime(date);
Log.i("...",""+old.get(Calendar.DAY_OF_WEEK));
Calendar now = Calendar.getInstance();
int weekday = now.get(Calendar.DAY_OF_WEEK);
if(weekday != Calendar.MONDAY){
int days = (Calendar.SATURDAY - weekday + 2) %7;
now.add(Calendar.DAY_OF_YEAR, days);
}
Date date2 = now.getTime();
Log.i("tag", ""+date2);
但正如我所说,它返回了错误的日期。
如果有人能提供帮助,我将不胜感激。因为我已经为此工作了几个小时。
【问题讨论】:
-
您提出了多个问题。 StackOverflow 在专注于单个 sep 时效果最佳
-
@BasilBourque 它基于一个问题。但我把它分成多个部分,这样就很清楚了。另外,我给出的所有例子都是针对那个问题的。
-
此外,您的所有问题都已被问及回答 很多次 次。发帖前先搜索。您将学会避免使用 j.u.Date 和 .Calendar 类,永远不要有效地使用 j.u.Date 的 toString 方法,因为它的格式和默认时区很糟糕,使用 Joda-Time 或新的 java.time 库,使用Joda-Time 中的 3 个不同的类以不同的方式处理时间跨度。
-
而且,当询问翻译“Ma”时,您应该提及语言。
-
我知道 JodaTime,但我知道使用普通 Java 是可能的。我还希望我的 .apk 变得尽可能小。但是如果我的问题已经被回答了很多次,请提供一些链接,因为我找不到这个问题(使用当天的简码,没有已知的有效日期)。提前致谢。