Am having string posting date like :
2011-03-27T09:39:01.607
and There is current date .
I want to get difference between these tw
Simple way to implement this:
import joda library in your project.
store your current date and future date in variable like this
//here currenDate and futureDate are of calendar type.
LocalDateTime currentDateTime = LocalDateTime.fromCalendarFields(currentDate);
LocalDateTime futureDateTime = LocalDateTime.fromCalendarFields(futureDate);
Now what you have to do is calculate difference between the two dates and save the difference,this difference will be used to subtract from next field.
for example: we have to display years,months,weeks...and so forth. after calculating years between the two dates we will minus the years amount from the months and similarly for the next fields...Hierarchy of the date time is as follows...
years-months-weeks-days-hours-minutes-seconds
now the snippet
/**
*
* @param context which activity its calling
* @param currentDateTime current time
* @param futureDateTime future time from which we have to calculate difference
* @param selectedUnitsFromSettings which units we have to find difference such as years,weeks....etc
* which will be stored in list...
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static HashMap dateBasedOnUnitCalculator(
Context ctx, LocalDateTime currentDateTime,
LocalDateTime futureDateTime, List selectedUnitsFromSettings) {
//to store the dates
Date currentTime = currentDateTime.toDateTime().toDate();
Date futureTime = futureDateTime.toDateTime().toDate();
//to store the units
String currentUnit = "";
String prevUnit = "";
//to store the value which you want to remove
int prevValue = 0;
//to store the calculated values in hashmap
HashMap units = new HashMap();
for(int i = 0; i < selectedUnitsFromSettings.size(); i++){
//to store the current unit for calculation of future date
currentUnit = selectedUnitsFromSettings.get(i);
//to remove higher unit from new future date we will use prevUnit
if(i > 0){
prevUnit = selectedUnitsFromSettings.get(i-1);
futureTime = getDateForPreviousUnit(futureTime,prevUnit,prevValue);
}
//now calculate the difference
if(currentUnit.equals("Year")){
Years q = Years.yearsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int years = q.getYears();
prevValue = years;
units.put("Year", prevValue);
}else if(currentUnit.equals("Month")){
Months w = Months.monthsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int months = w.getMonths();
prevValue = months;
units.put("Month", prevValue);
}else if(currentUnit.equals("Week")){
Weeks e = Weeks.weeksBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int weeks = e.getWeeks();
prevValue = weeks;
units.put("Week", prevValue);
}else if(currentUnit.equals("Day")){
Days r = Days.daysBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int days = r.getDays();
prevValue = days;
units.put("Day", prevValue);
}else if(currentUnit.equals("Hour")){
Hours a = Hours.hoursBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int hours = a.getHours();
prevValue = hours;
units.put("Hour", prevValue);
}else if(currentUnit.equals("Minute")){
Minutes s = Minutes.minutesBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int minutes = s.getMinutes();
prevValue = minutes;
units.put("Minute", prevValue);
}else if(currentUnit.equals("Second")){
Seconds d = Seconds.secondsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime()));
int seconds = d.getSeconds();
prevValue = seconds;
units.put("Second", prevValue);
}
}
return units;
}
to calculate future time for previous unit
/**
*
* @param futureTime the future date which will be modified
* @param prevString which unit value to be reduced
* @param prevValue how much to reduce from the current unit
* @return
*/
private static Date getDateForPreviousUnit(Date futureTime,
String prevString, int prevValue) {
Date calculatedDate = futureTime;
Constants.showLog(TAG, "prev string is "+prevString);
if(prevString.equals("Year")){
calculatedDate = new DateTime(futureTime).minusYears(prevValue).toDate();
}else if(prevString.equals("Month")){
calculatedDate = new DateTime(futureTime).minusMonths(prevValue).toDate();
}else if(prevString.equals("Week")){
calculatedDate = new DateTime(futureTime).minusWeeks(prevValue).toDate();
}else if(prevString.equals("Day")){
calculatedDate = new DateTime(futureTime).minusDays(prevValue).toDate();
}else if(prevString.equals("Hour")){
calculatedDate = new DateTime(futureTime).minusHours(prevValue).toDate();
}else if(prevString.equals("Minute")){
calculatedDate = new DateTime(futureTime).minusMinutes(prevValue).toDate();
}else if(prevString.equals("Second")){
calculatedDate = new DateTime(futureTime).minusSeconds(prevValue).toDate();
}
return calculatedDate;
}
now to call from any activity use this
HashTable hashTable = dateBasedOnUnitCalculator(this, currentDateTime, futureDateTime, selectedUnitsFromSettings);
//to display the values from hashtable
showLog(TAG,
" year "+hashTable.get("Year") +
" month "+hashTable.get("Month") +
" week "+hashTable.get("Week") +
" day "+hashTable.get("Day") +
" hours "+hashTable.get("Hour") +
" min " +hashTable.get("Minute") +
" sec " +hashTable.get("Second") +
" ");
selectedunitsfromsettings will have any units you desire.