如何区分4周前和1个月前?当我在android上编写测试代码时,我遇到了问题。
我认为这取决于我测试的日期。我认为对吗?如果我的意见是对的,那么我怎样才能做好或传递测试代码?
我传递测试代码的想法之一就是暂时保留测试日期。对我有什么想法吗?
抱歉,我认为我的问题不明确。我的代码的一部分就在这里。
assertEquals("a month ago", timeAgoWithAddedValue(Calendar.MONTH, -1));
private String timeAgoWithAddedValue(int field, int value) {
Calendar cal = Calendar.getInstance();
cal.add(field, value);
return timeAgo(cal.getTime());
}
public static final long WEEK_UNIT = DAY_UNIT * 7;
public static final long MONTH_UNIT = 2629746000L; // I found this value online, 1 Gregorian month -> ms
public static final long YEAR_UNIT = 31556952000L; // I found this value online, 1 Gregorian year -> ms
public String timeAgo(Date date) {
long now = Calendar.getInstance().getTimeInMillis();
long sinceNowInMillis = now - date.getTime();
...
if (sinceNowInMillis < MONTH_UNIT) {
long weeks = sinceNowInMillis / WEEK_UNIT;
// return proper ago string with weeks
}
if (sinceNowInMillis < YEAR_UNIT) {
long months = sinceNowInMillis / MONTH_UNIT;
// return proper ago string with months
}
...
}
我几个月前编写了代码,当时它成功了。但今天测试代码失败了。因为代码期望4 weeks ago
。我不知道我的代码是错的还是问题取决于周长,所以它是自然问题?
答案 0 :(得分:0)
获得以下功能:
json
[[1]]
[[1]]$politics
[[1]]$politics[[1]]
[[1]]$politics[[1]]$type
[1] "admin2"
[[1]]$politics[[1]]$friendly_type
[1] "country"
[[1]]$politics[[1]]$name
[1] "Kazakhstan"
[[1]]$politics[[1]]$code
[1] "kaz"
[[1]]$politics[[2]]
[[1]]$politics[[2]]$type
[1] "admin4"
[[1]]$politics[[2]]$friendly_type
[1] "state"
[[1]]$politics[[2]]$name
[1] "West Kazakhstan"
[[1]]$politics[[2]]$code
[1] "kz07"
[[1]]$location
[[1]]$location$latitude
[1] 51
[[1]]$location$longitude
[1] 53
<强>更新强>
你可以使用我的另一个功能:
public static String millisToLongDHMS(long duration) {
if (duration > 0) {
duration = new Date().getTime() - duration;
}
if (duration < 0) {
duration = 0;
}
StringBuffer res = new StringBuffer();
long temp = 0;
if (duration >= ONE_SECOND) {
temp = duration / ONE_DAY;
if (temp > 0) {
duration -= temp * ONE_DAY;
res.append(temp).append(" day").append(temp > 1 ? "s" : "")
.append(duration >= ONE_MINUTE ? ", " : "");
}
temp = duration / ONE_HOUR;
if (temp > 0) {
duration -= temp * ONE_HOUR;
res.append(temp).append(" hour").append(temp > 1 ? "s" : "")
.append(duration >= ONE_MINUTE ? ", " : "");
}
temp = duration / ONE_MINUTE;
if (temp > 0) {
duration -= temp * ONE_MINUTE;
res.append(temp).append(" min").append(temp > 1 ? "s" : "");
}
if (!res.toString().equals("") && duration >= ONE_SECOND) {
res.append(" and ");
}
temp = duration / ONE_SECOND;
if (temp > 0) {
res.append(temp).append(" sec").append(temp > 1 ? "s" : "");
}
res.append(" ago");
return res.toString();
} else {
return "Just Now";
}
}
答案 1 :(得分:0)
您可以使用此行代码来实现您的目标,而无需在项目中使用任何库
DateUtils.getRelativeTimeSpanString(timestamp, new Date().getTime(), DateUtils.MINUTE_IN_MILLIS)
这里timestamp
是一段很长的时间
在此处的文档DateUtils
中阅读更多内容 例如如果您将时间戳传递为1482739673913
,您将获得6 minutes ago
如果时间戳为1482582128877
,您将获得2 days ago
答案 2 :(得分:0)
我弄清楚问题是什么。这取决于每月的日子。
月份的日子不一样(10月31日,11月30日,12月31日......)但是当我在我的代码中计算它时,我正在使用常数。
我的意思是,如果月份有31天,那么因为我的代码中的NowInMillis小于MONTH_UNIT。结果是'4周前'跟随我的代码。因为我使用Calendar.add(Calender.MONTH,-1)计算了目标日期。
另一方面,如果月份有30天或更少,则因为我的代码中的NowInMillis大于MONTH_UNIT。所以结果是'1个月前'跟随我的代码。