محاسبه سال , ماه , هفته , روز , ساعت و ... بین دو تاریخ
سلام دوستان
من بر فرض یک تاریخی و ساعتی دارم ( میلادی )
مثلا اینطوری
"2011-3-12 15:30:10"
حالا میخوام وقتی این تاریخو گرفتم بهم بگه چند سال گذشته
ولی اگه تاریخ نزدیک بود مثلا بگه چند ساعت یا چند دقیقه یا ثانیه
دقیقا مثل همین پرسش پاسخ استاد که یه پست میزاری بهت میگه کی گذاشته شده
پیشاپیش ممنون از کمک
از این لینک استفاده کردم، فکر کنم توی مثال دومش هم از همون لایبرری که پیداکرده بودید استفاده کرده.
String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
long diffWeek = diffDays/7;
long diffMonth = diffDays/30;
long diffYear = diffDays/365;
String diffTime = "";
if(diffYear != 0 && diffMonth >= 12){
diffTime = "سال قبل " + diffYear;
}else if(diffMonth != 0 && diffWeek >= 4){
diffTime = "ماه قبل " + diffMonth;
}else if(diffWeek != 0 && diffDays >= 6){
diffTime = "هفته قبل " +diffWeek;
}else if(diffDays != 0){
diffTime = "روز قبل " + diffDays;
}else if(diffHours != 0){
diffTime = "ساعت قبل " + diffHours;
}else if(diffMinutes != 0){
diffTime = "دقیقه قبل " + diffMinutes;
}else if(diffSeconds != 0){
diffTime = "ثانیه قبل " + diffSeconds;
}
Log.i("LOG", diffTime);
} catch (Exception e) {
e.printStackTrace();
}
دوستان سمت سرور چگونه تفاوت رو محاسبه کنیم ؟ چندین کد از استک اوردم تست کردم بر فرض فرق بین 2 تاریخ که 2 روز بود رو 1 و نیم روز نشون میداد
بر فرض من وقتی یک تاریخ رو با ساعت تو دیتابیس دارم , چطوری با امروز مقایسه کنم ؟
خیلی واجبه خواهشا اگه اطلاعاتی دارید کمک کنید
شما دو تاریخ که البته ساعت هم دارند ، دارید و اختلاف اونا رو به صورت ریز بر حسب سال و ماه و هفته و روز و دقیقه و ثانیه میخواید. پس ابتدا اختلاف دو تاریخ رو برحسب میلی ثانیه حساب کنید. و در متغیری مثل d بریزید . سپس :
برای ثانیه های باقیمانده : اول عدد شما که در متغییر d هستش تقسیم به هزار میکنید تا میلی ثانیه به ثانیه تبدیل بشه. حالا باید به اندازه ای که واحد پر میشه تا برسه به واحد بالایی از روی ثانیه ها برداریم. واحد بالایی دقیقه است و هر 60 ثانیه میشه یک دقیقه. پس باید 60 تا 60 تا برداریم ازش . این کار با عملگر باقیمانده انجام میشه. پس ثانیه های باقیمانده حساب شد.
seccond=(d/1000)%60
برای دقایق باقیمانده : اول عدد شما که در متغییر d هستش تبدیل به دقیقه می کنید. حالا باید به اندازه ای که واحد پر میشه تا برسه به واحد بالایی از روی دقیقه ها برداریم. واحد بالایی ساعت است و هر 60 دقیقه میشه یک ساعت. پس باید 60 تا 60 تا برداریم ازش . این کار با عملگر باقیمانده انجام میشه. پس دقایق باقیمانده باقیمانده حساب شد.
min=(d/(1000*60))%60
به همین ترتیب برای ساعت های باقیمانده :
hour=(d/(1000*60*60))%24
و روزهای باقیمانده
day=(d/(1000*60*60*24))%7
و هفته های باقیمانده :
week=(d/(1000*60*60*24*7))%4.28
و ماههای باقیمانده :
month=(d/(1000*60*60*24*30))%12
و سالهای باقیمانده :
year=d/(1000*60*60*24*12)
مشکلی که هست اینجا فقط در محاسبه هفته هاست که چون به ازای هر ماه تعداد هفته های روندی وجود نداره و باید روشی غیر از این بکار برد .
امیدوارم کمکی کرده باشه
من این کد رو استفاده کردم، جواب داد:
/**
* return format: yyyy/MM/dd hh:mm
*
*/
public static String getCurrentDate_MiladiWithTime() {
Calendar cal = Calendar.getInstance();
int Day = cal.get(Calendar.DAY_OF_MONTH);
int Month = cal.get(Calendar.MONTH) + 1;
int Year = cal.get(Calendar.YEAR);
Time now = new Time(Time.getCurrentTimezone());
now.setToNow();
String today = Year + "/" + Month + "/" + Day + " " + now.format("%k:%M");
return today;
}
/**
* form of input data:yyyy/MM/dd HH:mm;
*
*/
public static String calculate_new(String targetDate) {
Log.i("LOG", targetDate);
String nowDate = getCurrentDate_MiladiWithTime();
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Date d1 = null;
Date d2 = null;
String returnValue = "";
try {
d1 = format.parse(targetDate);
d2 = format.parse(nowDate);
//in milliseconds
long diff = (d2.getTime() - d1.getTime()) / 1000;
int minute = 60;
int hour = minute * 60;
int day = hour * 24;
int month = day * 30;
int year = day * 365;
int diffYears = (int) Math.floor(diff / year);
diff -= diffYears * year;
int diffMonthes = (int) Math.floor(diff / month);
diff -= diffMonthes * month;
int diffDays = (int) Math.floor(diff / day);
diff -= diffDays * day;
int diffHours = (int) Math.floor(diff / hour);
diff -= diffHours * hour;
int diffMinutes = (int) Math.floor(diff / minute);
/*
//if you don't need all item simultaneously and want all values complete:
int diffYears = (int) Math.floor(diff / year);
int diffMonthes = (int) Math.floor(diff / month);
int diffDays = (int) Math.floor(diff / day);
int diffHours = (int) Math.floor(diff / hour);
int diffMinutes = (int) Math.floor(diff / minute);
*/
Log.i("LOG", diffYears + " years, ");
Log.i("LOG", diffMonthes + " monthes, ");
Log.i("LOG", diffDays + " days, ");
Log.i("LOG", diffHours + " hours, ");
Log.i("LOG", diffMinutes + " minutes, ");
Log.i("LOG", diff + " diff, ");
if (diffYears != 0) {
returnValue = diffYears + " " + "سال";
} else if (diffMonthes != 0) {
returnValue = diffMonthes + " " + "ماه";
} else if (diffDays != 0) {
returnValue = diffDays + " " + "روز";
} else if (diffHours != 0) {
returnValue = diffHours + " " + "ساعت";
} else if (diffMinutes != 0) {
returnValue = diffMinutes + " " + "دقیقه";
} else {
returnValue = "لحظه ای";
}
}
catch (Exception e) {
e.printStackTrace();
}
return returnValue + " قبل";
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .