PDA

View Full Version : محاسبه سال , ماه , هفته , روز , ساعت و ... بین دو تاریخ



Shut Down
سه شنبه 02 تیر 1394, 18:18 عصر
سلام دوستان
من بر فرض یک تاریخی و ساعتی دارم ( میلادی )
مثلا اینطوری
"2011-3-12 15:30:10"
حالا میخوام وقتی این تاریخو گرفتم بهم بگه چند سال گذشته
ولی اگه تاریخ نزدیک بود مثلا بگه چند ساعت یا چند دقیقه یا ثانیه
دقیقا مثل انجمن ها که مثلا میگه کی پاسخ گذاشته شده
پیشاپیش ممنون از کمک

storm_saeed
سه شنبه 02 تیر 1394, 19:53 عصر
از لایبرری joda-time استفاده کنید
داکیومنتش هم به اندازه کافی همه چیز رو گفته (مثل مورد شما)

tux-world
سه شنبه 02 تیر 1394, 19:58 عصر
به این میگن timeAgo میتونید سورس و مثالهای فراوانی تو اینترنت پیدا کنید :لبخندساده:

Shut Down
سه شنبه 02 تیر 1394, 20:48 عصر
ممنون , joda رو دیدم خیلی قرو قاطی بود کلا نفهمیدم چی میگه , الانم یک تیکه کد دارم که فاصله رو به روز و ثانیه و میلی بدست میاره ولی نمیدونم چطوری کدی بنویسم که نسبت به اونا ساعت یا روز یا هفته و ماه رو اعلام کنه

djtrex
سه شنبه 02 تیر 1394, 22:17 عصر
خود sdk اندروید یه کلاس داره به اسم DateUtils :
http://developer.android.com/reference/android/text/format/DateUtils.html

اونم یه سری متد داره برای اینکار:
getRelativeTimeSpanString
و
getRelativeDateTimeString



Calendar birthDay = Calendar.getInstance();
birthDay.set(year, month, day, hour, minute, seconds);


String relativeTime = DateUtils.getRelativeDateTimeString(
this, //context
birthDay.getTime().getTime(),
DateUtils.SECOND_IN_MILLIS,
DateUtils.WEEK_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE | DateUtils.FORMAT_ABBREV_ALL
).toString();



132554




2015/5/20 12:33:00
3 Days ago, 12:33PM
--------------
2015/5/22 12:33:00
Yesterday, 12:33PM
-------------
2015/5/23 12:33:00
53 mins ago, 12:33PM
-------------
2015/5/23 12:33:00
1 hour ago, 12:33PM
-------------
2015/5/23 13:28:00
35 secs age, 13:28PM


برای بیشتر از یک هفته خود اندروید غیر فعال کرده:



132555


از کتابخانه های دیگه هم میتونید استفاده کنید:

joda-time:
http://stackoverflow.com/questions/2179644/how-to-calculate-elapsed-time-from-now-with-joda-time/2179831#2179831

prettyTime:
http://www.ocpsoft.org/prettytime/

hasan_esfahan
سه شنبه 02 تیر 1394, 22:54 عصر
DateTimeUtils obj = new DateTimeUtils();
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("dd/M/yyyy hh:mm:ss");

try {

Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10");
Date date2 = simpleDateFormat.parse("13/10/2013 20:35:55");

obj.printDifference(date1, date2);

} catch (ParseException e) {
e.printStackTrace();
}

}

//1 minute = 60 seconds
//1 hour = 60 x 60 = 3600
//1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate){

//milliseconds
long different = endDate.getTime() - startDate.getTime();

System.out.println("startDate : " + startDate);
System.out.println("endDate : "+ endDate);
System.out.println("different : " + different);

long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;

long elapsedDays = different / daysInMilli;
different = different % daysInMilli;

long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;

long elapsedMinutes = different / minutesInMilli;
different = different % minutesInMilli;

long elapsedSeconds = different / secondsInMilli;

System.out.printf(
"%d days, %d hours, %d minutes, %d seconds%n",
elapsedDays,
elapsedHours, elapsedMinutes, elapsedSeconds);

}
out put is :startDate : Thu Oct 10 11:30:10 SGT 2013
endDate : Sun Oct 13 20:35:55 SGT 2013
different : 291945000
3 days, 9 hours, 5 minutes, 45 seconds




http://stackoverflow.com/questions/21285161/android-difference-between-two-dates

Shut Down
سه شنبه 02 تیر 1394, 23:30 عصر
دستتون درد نکنه بچه اون مشکلم حل شد , ولی تو گوشی های متفاوت و TimeZone های متفاوت خروجی متفاوتی میده
اینم کدی که استفاده شده :

public static String timeAgo(long millis) { long diff = new Date().getTime() - millis;
Resources r = G.context.getResources();


String prefix = r.getString(R.string.time_ago_prefix);
String suffix = r.getString(R.string.time_ago_suffix);


double seconds = Math.abs(diff) / 1000;
double minutes = seconds / 60;
double hours = minutes / 60;
double days = hours / 24;
double years = days / 365;


String words;


if (seconds < 45) {
words = r.getString(R.string.time_ago_seconds, Math.round(seconds));
} else if (seconds < 90) {
words = r.getString(R.string.time_ago_minute, 1);
} else if (minutes < 45) {
words = r.getString(R.string.time_ago_minutes, Math.round(minutes));
} else if (minutes < 90) {
words = r.getString(R.string.time_ago_hour, 1);
} else if (hours < 24) {
words = r.getString(R.string.time_ago_hours, Math.round(hours));
} else if (hours < 42) {
words = r.getString(R.string.time_ago_day, 1);
} else if (days < 30) {
words = r.getString(R.string.time_ago_days, Math.round(days));
} else if (days < 45) {
words = r.getString(R.string.time_ago_month, 1);
} else if (days < 365) {
words = r.getString(R.string.time_ago_months, Math.round(days / 30));
} else if (years < 1.5) {
words = r.getString(R.string.time_ago_year, 1);
} else {
words = r.getString(R.string.time_ago_years, Math.round(years));
}


StringBuilder sb = new StringBuilder();


if (prefix != null && prefix.length() > 0) {
sb.append(prefix).append(" ");
}


sb.append(words);


if (suffix != null && suffix.length() > 0) {
sb.append(" ").append(suffix);
}


return sb.toString().trim();
}