我遵循的方法getDiffDateMap
计算了2个日期之间的差异和Map
整数的返回值,它们分别代表毫秒,秒,分钟,小时,天,月和年.
public static Map<Integer, String> getDiffDateMap(String dateA, String dateB) {
Calendar cal = Calendar.getInstance();
Map<Integer,String> out = new LinkedHashMap<Integer, String>();
long timeInMillA = 0;
long timeInMillB = 0;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date convertedDateA;
Date convertedDateB;
try {
convertedDateA = dateFormat.parse(dateA);
cal.setTime(convertedDateA);
timeInMillA = cal.getTimeInMillis();
convertedDateB = dateFormat.parse(dateB);
cal.setTime(convertedDateB);
timeInMillB = cal.getTimeInMillis();
} catch (ParseException e) {
e.printStackTrace();
}
long mili = timeInMillB - timeInMillA;
long sec = mili/1000;
long min = sec/60;
long hour = min/60;
long day = hour/24;
long week = day/7;
long month = day/31; // ????
long year = month/12;
out.put(7, mili + "");
out.put(6, sec + "");
out.put(5, min + "");
out.put(4, hour + "");
out.put(3, day + "");
out.put(2, week + "");
out.put(1, month + "");
out.put(0, year + "");
return out;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是从实际日数计算月份:
long month = day/31; // or 30
Run Code Online (Sandbox Code Playgroud)
例如:
Map<Integer,String> out = getDiffInMillsec("2012-9-01 20:9:01", "2012-10-01 20:10:01");
System.out.println(Arrays.asList(out));
Run Code Online (Sandbox Code Playgroud)
我得到的输出:[{7=2592060000, 6=2592060, 5=43201, 4=720, 3=30, 2=4, 1=0, 0=0}]
这里1
是月计及0.因为差为30只天.我需要添加什么流来解决这个问题?有什么建议?
我遵循方法getDiffDateMap计算2个日期之间的差异,并返回分别代表毫秒,秒,分钟,小时,天,月和年的整数映射.
不要重新发明轮子:)
Joda Time有代码可以完成所有这些以及更多.例如:
LocalDateTime start = ...;
LocalDateTime end = ...;
Period difference = new Period(start, end, PeriodType.yearMonthDayTime());
int months = difference.getMonths(); // etc
Run Code Online (Sandbox Code Playgroud)
请注意,当您将不同的转换为毫秒时,您无法达到月数 - 因为月数将取决于开始/结束日期.(30天可能是也可能不是一个月,例如...)
我强烈建议您在整个Java代码中使用Joda Time,而不是java.util.*
.这是一个很大更好的API,以及一个希望这将意味着你很少-IF-永远需要编写自己的日期/时间处理代码.
归档时间: |
|
查看次数: |
5994 次 |
最近记录: |