Java: ما هي/أين هي الحد الأقصى والحد الأدنى لقيم GregorianCalendar؟

StackOverflow https://stackoverflow.com/questions/2393016

سؤال

ما هي الحد الأقصى والحد الأدنى لقيم الغريغوريانكالندر؟

هل هم ثابتون مثل integer.max_value ، أو ربما gregoriancalendar.get (بلاه)؟

باختصار ، كيف يمكنني إنشاء مثيل GregorianCalendar بقيمة Min/Max؟

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

المحلول

هذا يجب أن يعمل:

GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));

GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));

نصائح أخرى

أخذت اقتراح Joekutner وركضته مع:

GregorianCalendar gCal = new GregorianCalendar( );

gCal.setTime(new Date(Long.MIN_VALUE));
System.out.println( "Min Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));

gCal.set( Calendar.SECOND, 3 );
System.out.println( "Min Date less 1 second is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));

gCal.setTime(new Date(Long.MAX_VALUE));
System.out.println( "Max Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));


Min Date is Sun Dec 02 16:47:04 GMT 292269055 0
Min Date less 1 second is Sun Aug 17 07:12:54 GMT 292278994 1
Max Date is Sun Aug 17 07:12:55 GMT 292278994 1

مما يدل على الحد الأدنى والحد الأقصى ، وبينهما مؤشر على ما يحدث إذا حاولت الانتقال إلى الثانية قبل الحد الأدنى - يمكنك التفاف حولها.

كان هذا الإصدار 1.6.0_17.


يمكنك محاولة الاتصال calendar.getMinimum () لكل نوع من أنواع الحقل (أي سنة ، شهر ، إلخ) ، ثم قم بتعيين هذه القيم الدنيا على أنواع الحقول المقابلة. هذا من شأنه أن يعطيك الحد الأدنى من التقويم. لا أعرف ما إذا كانت هناك طريقة أسرع للقيام بذلك.

قد تكون الإجابات الأخرى صحيحة ولكن استخدام الفصول التي تم تفكيكها.

Java.Time

تم استبدال فصول الوقت القديمة (java.util.date/.calendar وما إلى ذلك) Java.Time إطار بني في Java 8 ثم لاحقًا.

فصول Java.time مستوحاة من وقت جودا, ، محددة من قبل JSR 310, ، التي امتدتها مشروع Threeten-Extra ، تم نقله إلى Java 6 و 7 بواسطة Threeten-Backport المشروع ، وتكييفه مع Android في Threetenabp مشروع. يرى درس تعليمي.

للحظة على الجدول الزمني في التوقيت العالمي بقرار نانو ثانية, ، استعمال Instant. أعطى إزاحة من UTC, ، استعمال OffsetDateTime. ل وحدة زمنية (قواعد الإزاحة + للحالات الشاذة) ، استخدم ZonedDateTime, ، ولكن بطبيعتها ليس لديها دقيقة/كحد أقصى ، ولا ZoneId. للحصول على قيمة تاريخية فقط بدون وقت اليوم وبدون منطقة زمنية ، استخدم LocalDate. لفترة زمنية اليوم فقط القيمة دون تاريخ وبدون منطقة زمنية ، استخدم LocalTime. بالنسبة للوقت الموعد بدون منطقة زمنية ، استخدم LocalDateTime.

فيما يلي جميع الثوابت المحددة مسبقا.

الحذر: كن حذرًا من استخدام هذه القيم كنوع من العلم أو المعنى الخاص. قد لا تدعم العديد من مكتبات البرامج وقواعد البيانات هذه القيم المتطرفة.

للحصول على علم أو معنى خاص مثل "لا قيمة متوفرة" غير متوفرة ، أقترح اختيار لحظة تعسفية ولكن تجنب الذهاب إلى هذه الوصول المتطرف إما إلى الوراء أو إلى الأمام في الوقت المناسب. ربما تاريخ مرجع UNIX EPOCH, ، اللحظة الأولى من عام 1970 في UTC ، 1970-01-01T00: 00: 00Z. تم تعريفها على أنها ثابتة في جافا: لحظة


عن Java.Time

ال Java.Time تم بناء إطار العمل في Java 8 وما بعده. هذه الفصول تحل محل القديم المزعج إرث فصول وقت التاريخ مثل java.util.Date, Calendar, & SimpleDateFormat.

ال وقت جودا مشروع ، الآن في نمط الصيانة, ، ينصح بالهجرة إلى Java.Time الطبقات.

لمعرفة المزيد ، انظر تعليمي أوراكل. والبحث في سعة مكدس للعديد من الأمثلة والتفسيرات. المواصفات JSR 310.

يمكنك التبادل Java.Time الكائنات مباشرة مع قاعدة البيانات الخاصة بك. إستخدم سائق JDBC متوافق مع JDBC 4.2 أو لاحقا. لا حاجة للسلاسل ، لا حاجة ل java.sql.* الطبقات.

من أين تحصل على فصول java.time؟

ال Threeten-extra يمتد المشروع Java.time مع فصول إضافية. هذا المشروع هو أرضية إثبات للإضافات المستقبلية المحتملة إلى Java.time. قد تجد بعض الفصول المفيدة هنا مثل Interval, YearWeek, YearQuarter, ، و أكثر.

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