سؤال

وطيب، أنا الحيرة رسميا على هذه الخطوة. لدي الكائن تقويم ميلادي التي أود أن تحديد ما إذا كان في الماضي والحاضر، أو المستقبل. وحتى الآن، في مستندات التقويم # compareTo ومربكة بالنسبة لي، في ذلك أنا على الحصول على نتائج خاطئ. وهناك فئة اختبار بسيط يوضح مشكلتي:

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

        public static void main( String[] args )
        {
                GregorianCalendar datePast = new GregorianCalendar();
                datePast.add(Calendar.MONTH, -6); // subtract 6 months
                GregorianCalendar datePresent = new GregorianCalendar();
                GregorianCalendar dateFuture = new GregorianCalendar();
                datePast.add(Calendar.MONTH, 6); // add 6 months

                System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
                System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
                System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
        }
}

وإخراج:

compare datePresent to datePast: 1
compare datePresent to datePresent: 0
compare datePresent to dateFuture: 0

وما أفهمه من compareTo هو أن السطر الأخير يجب أن يكون -1. يمكن لأحد أن يقول لي ما أفعله خطأ؟

هل كانت مفيدة؟

المحلول

ولقد أضاف 6 أشهر إلى datePast، وليس dateFuture. هنا هو رمز العمل:

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

    public static void main( String[] args )
    {
        GregorianCalendar datePast = new GregorianCalendar();
        datePast.add(Calendar.MONTH, -6); // subtract 6 months
        GregorianCalendar datePresent = new GregorianCalendar();
        GregorianCalendar dateFuture = new GregorianCalendar();
        dateFuture.add(Calendar.MONTH, 6); // add 6 months

        System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
        System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
        System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
    }
}

وسوف نتائجك كانت غير متناسقة ل<م> أحيانا dateFuture سيكون في وقت لاحق من datePresent، وهذا يتوقف على عند الساعة الداخلية "تكتك".

وبالإضافة إلى كل هذا، وأنا لا يمكن أن تساعد ولكن إعطاء بلدي القياسية تاريخ جافا ووقت النصيحة: استخدام <لأ href = "http://joda-time.sourceforge.net/" يختلط = "نوفولو noreferrer" > Joda وقت بدلا من ذلك. انها ليست مسؤولة عن هذه المشكلة بالذات، على الرغم من حقيقة أن العديد من أنواع هي غير قابلة للتغيير من شأنه أن يساعد. ولكن بصفة عامة انها <م> كثير أفضل مكتبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top