آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Pr0gramm3r  8 سال پیش  5 سال پیش
+6 0

سلام دوستان

من بر فرض یک تاریخی و ساعتی دارم ( میلادی ) 

مثلا اینطوری 

"2011-3-12 15:30:10"

حالا میخوام وقتی این تاریخو گرفتم بهم بگه چند سال گذشته

ولی اگه تاریخ نزدیک بود مثلا بگه چند ساعت یا چند دقیقه یا ثانیه

دقیقا مثل همین پرسش پاسخ استاد که یه پست میزاری بهت میگه کی گذاشته شده

پیشاپیش ممنون از کمک

 

+1 0
لینک اینو پیدا کردم ( به نتیجه رسیدم میگم حذف کنید تایپک رو ) (8 سال پیش)
0 0
دوستان خیلی پیچیده بود کلا بیخیال joda شدم , لایبری دیگه سراغ دارید یا کد؟ (8 سال پیش)
0 0
up (8 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
Ali  8 سال پیش
+2 0

از این لینک استفاده کردم، فکر کنم توی مثال دومش هم از همون لایبرری که پیداکرده بودید استفاده کرده.

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();
}
+1 0
ممنون ولی منم دقیقا همین کد رو پیدا کردم :) , ولی مشکل اینه که مثلا بهت میگه چند روزه , برای تقسیمات چیکار کنیم ؟ که مثلا بگه چند هفته یا ماه یا سال گذشته؟ یا این که تشخیص بده به روز نرسیده و ساعت و دقیقه رو بگه؟ (8 سال پیش)
0 0
یعنی میخواهید هفته و ماه و سال رو هم مشخص کنه؟ (8 سال پیش)
0 0
بله و این که وقتی یک تاریخ رو دادیم بهش , خودش نسبت به تعداد میلی ثانیه انتخاب کنه که بهتره به ثانیه خروجی رو بده یا به دقیقه یا روز یا ماه یا سال ... (8 سال پیش)
+1 0
این چطوره؟ البته تقریبیه، دقتش زیاد نیست. (8 سال پیش)
0 0
ببخشید اشتباه شد :( (8 سال پیش)
+1 0
اصلاح شد. (8 سال پیش)
0 0
ممنون , ولی این 2 تا date رو باید خودمون بدیم دیگه درسته ؟ یکیشو currentTime در نظر میگیریم خوب ؟ ( از گوشی زمانو میگیره ) و دیگری هم چیزی که خودمون بهش گفتیم , حالا این وسط اگه تاریخ گوشی اونور اونور بشه یا تویه کشور دیگه باشه بهم میخوره , نمیدونم برای اون چیکار کنم (8 سال پیش)
0 0
اگه تاریخ گوشی اشتباه باشه خوب تاریخ اولیه هم به همون میزان اشتباهه پس برنامه درست کار میکنه اما اگه بازم با این موضوع مشکل داری میتونی تاریخ رو از اینترنت بگیری. (8 سال پیش)
0 0
نه ببینید تاریخ اول از نت گرفته میشه مثلا 2014 , حالا تاریخ امروز 2015 هست , اما گوشی 2016 , و گوشی میاد 2 سال اختلاف رو نشون میده در صورتی که یک سال اختلاف هست (8 سال پیش)
0 0
فکر کنم تنها راهش گرفتن زمان دوم از اینترنت باشه که با مشکلات دیگه‌ای همراهه اما اگه بشه تاریخ اول رو هم از گوشی گرفت بهتره. (8 سال پیش)
0 0
up (8 سال پیش)
پاسخ به سوال 
Pr0gramm3r  8 سال پیش
0 0

دوستان سمت سرور چگونه تفاوت رو محاسبه کنیم ؟ چندین کد از استک اوردم تست کردم بر فرض فرق بین 2 تاریخ که 2 روز بود رو 1 و نیم روز نشون میداد 

بر فرض من وقتی یک تاریخ رو با ساعت تو دیتابیس دارم , چطوری با امروز مقایسه کنم ؟

خیلی واجبه خواهشا اگه اطلاعاتی دارید کمک کنید

0 0
up , تا جواب نگیرم ول کن نیستم D: (8 سال پیش)
پاسخ به سوال 
Master  8 سال پیش
+1 0

شما دو تاریخ که البته ساعت هم دارند  ، دارید و اختلاف اونا رو به صورت ریز بر حسب سال و ماه و هفته و روز و دقیقه و ثانیه میخواید. پس ابتدا اختلاف دو تاریخ رو برحسب میلی ثانیه حساب کنید. و در متغیری مثل 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)

مشکلی که هست اینجا فقط در محاسبه هفته هاست که چون به ازای هر ماه تعداد هفته های روندی وجود نداره و  باید روشی غیر از این بکار برد .

امیدوارم کمکی کرده باشه

0 0
خیلی ممنون , مشکل من الان محاسبه تعداد روزو هفته و این داستانا نیست , اون حل شد , مشکل من اختلاف میلی ثانیه بین تو تاریخ هست که از هر کدی استفاده کردم غلط جواب میده , مثلا 1 ماه ( 31 روز ) رو 30 روز و خورده ای نشون میده (8 سال پیش)
0 0
خیلی جالبه موضوع به این به درد بخوری رو کسی پیگیر نیست (8 سال پیش)
0 0
خیلی جالبه موضوع به این به درد بخوری رو کسی پیگیر نیست (8 سال پیش)
پاسخ به سوال 
116236  5 سال پیش
0 0

من این کد رو استفاده کردم، جواب داد:

    /**
     * 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 + " قبل";

    }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .