في جاوة ، احصل على جميع تواريخ عطلة نهاية الأسبوع في شهر معين

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

  •  17-09-2020
  •  | 
  •  

سؤال

أحتاج إلى العثور على جميع تواريخ عطلة نهاية الأسبوع لشهر معين وسنة معينة.

على سبيل المثال:بالنسبة إلى 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.* الطبقات.

حيث للحصول على جافا.دروس الوقت?

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

يمكنك محاولة مثل هذا:

giveacodicetagpre.

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