في جاوة ، احصل على جميع تواريخ عطلة نهاية الأسبوع في شهر معين
سؤال
أحتاج إلى العثور على جميع تواريخ عطلة نهاية الأسبوع لشهر معين وسنة معينة.
على سبيل المثال:بالنسبة إلى 01 (شهر) ، 2010 (سنة) ، يجب أن يكون الناتج :2,3,9,10,16,17,23,24,30,31, جميع تواريخ عطلة نهاية الأسبوع.
المحلول
هنا هو إصدار تقريبي مع تعليقات تصف الخطوات:
giveacodicetagpre.نصائح أخرى
جافا.الوقت
يمكنك استخدام جافا 8 ستريم و ال جافا.حزمة الوقت.هنا IntStream
من عند 1
إلى عدد الأيام في الشهر المحدد يتم إنشاؤه.يتم تعيين هذا الدفق إلى دفق من LocalDate
في شهر معين ثم تصفيتها للحفاظ على السبت والأحد.
import java.time.DayOfWeek;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.YearMonth;
import java.util.stream.IntStream;
class Stackoverflow{
public static void main(String args[]){
int year = 2010;
Month month = Month.JANUARY;
IntStream.rangeClosed(1,YearMonth.of(year, month).lengthOfMonth())
.mapToObj(day -> LocalDate.of(year, month, day))
.filter(date -> date.getDayOfWeek() == DayOfWeek.SATURDAY ||
date.getDayOfWeek() == DayOfWeek.SUNDAY)
.forEach(date -> System.out.print(date.getDayOfMonth() + " "));
}
}
نجد نفس النتيجة مثل الإجابة الأولى(2 3 9 10 16 17 23 24 30 31).
ال إجابة لوكني يبدو أن يكون صحيحا ، مع نقاط المكافأة لاستخدام تيارات.
EnumSet
اقتراحي للتحسين: EnumSet
.هذه الفئة هي تنفيذ فعال للغاية من Set
.ممثلة داخليا كما ناقلات بت ، فهي سريعة لتنفيذ وأخذ الذاكرة قليلا جدا.
باستخدام EnumSet
تمكنك من رمز لينة تعريف عطلة نهاية الأسبوع عن طريق تمرير في Set<DayOfWeek>
.
Set<DayOfWeek> dows = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
التجريبي باستخدام بناء الجملة من الطراز القديم دون تيارات.يمكنك التكيف كود إجابة لوكني لاستخدام EnumSet
بطريقة مماثلة.
YearMonth ym = YearMonth.of( 2016 , Month.JANUARY ) ;
int initialCapacity = ( ( ym.lengthOfMonth() / 7 ) + 1 ) * dows.size() ; // Maximum possible weeks * number of days per week.
List<LocalDate> dates = new ArrayList<>( initialCapacity );
for (int dayOfMonth = 1; dayOfMonth <= ym.lengthOfMonth() ; dayOfMonth ++) {
LocalDate ld = ym.atDay( dayOfMonth ) ;
DayOfWeek dow = ld.getDayOfWeek() ;
if( dows.contains( dow ) ) {
// Is this date *is* one of the days we care about, collect it.
dates.add( ld );
}
}
TemporalAdjuster
يمكنك أيضا الاستفادة من TemporalAdjuster
الواجهة التي توفر للفئات التي تعالج قيم التاريخ والوقت.ال TemporalAdjusters
فئة (لاحظ الجمع s
) يوفر العديد من التطبيقات المفيدة.
ال ثريتن-إكسترا يوفر المشروع فصول العمل مع جافا.الوقت.وهذا يشمل أ TemporalAdjuster
التنفيذ, Temporals.nextWorkingDay()
.
يمكنك كتابة التنفيذ الخاص بك للقيام بالعكس ، أ nextWeekendDay
الضابط الزمني.
حول جافا.الوقت
ال جافا.الوقت تم بناء الإطار في جافا 8 والإصدارات الأحدث.هذه الفئات تحل محل القديمة المزعجة الإرث فصول التاريخ والوقت مثل java.util.Date
, Calendar
, & SimpleDateFormat
.
ال جودا تايم المشروع ، الآن في وضع الصيانة, ، ينصح الهجرة إلى جافا.الوقت الطبقات.
لمعرفة المزيد ، راجع أوراكل تعليمي.والبحث كومة تجاوز للحصول على العديد من الأمثلة والتفسيرات.المواصفات هي 310.
يمكنك تبادل جافا.الوقت الكائنات مباشرة مع قاعدة البيانات الخاصة بك.استخدام سائق جدبك متوافقة مع جدبك 4.2 أو لاحقا.لا حاجة للسلاسل ، لا حاجة ل java.sql.*
الطبقات.
حيث للحصول على جافا.دروس الوقت?
- جافا سي 8, جافا سي 9, جافا سي 10, جافا سي 11, ، ولاحقا-جزء من واجهة برمجة تطبيقات جافا القياسية مع تنفيذ مجمع.
- جافا 9 يضيف بعض الميزات البسيطة والإصلاحات.
- جافا سي 6 و جافا سي 7
- معظم جافا.الوقت وظائف هو العودة استدار لجافا 6 و 7 في ثريتن-باكبورت.
- اندرويد
- الإصدارات الأحدث من تطبيقات حزمة الروبوت من جافا.الوقت الطبقات.
- لالروبوت في وقت سابق (<26), ال ثريتيناب المشروع يتكيف ثريتن-باكبورت (المذكورة أعلاه).انظر كيفية استخدام ثريتيناب….
ال ثريتن-إكسترا مشروع يمتد جافا.الوقت مع فصول إضافية.هذا المشروع هو أرض إثبات للإضافات المستقبلية المحتملة لجافا.الوقت.قد تجد بعض الفئات المفيدة هنا مثل Interval
, YearWeek
, YearQuarter
, ، و المزيد.
يمكنك محاولة مثل هذا:
giveacodicetagpre.