2016-05-11 32 views
5

ayın her tarih haftanın hangi günü belirleyin Şimdiye kadar bu var:Java 8 ile bir takvim oluşturmak istiyorum

(örnek Mayıs için) geçerli ayın günlerini yazdırır
YearMonth yearMonthObject = YearMonth.of(year, month); 
int daysOfCurrentMonth = yearMonthObject.lengthOfMonth(); 

int i = 1; 
ArrayList<Integer> Dayes = new ArrayList<Integer>(); 
for(i=1; i<=daysOfCurrentMonth; i++){ 
    Dayes.add(i); 
} 

Dayes.forEach(value -> System.out.print(value)); 

.

1'in Pazar olduğunu, 2'nin Pazartesi, 3'ün Salı, ..., 8'inin (önümüzdeki hafta) vb. Olduğunu nasıl belirleyebilirim?

cevap

6

YearMonth nesnesiniz var. Ayın her günü için, LocalDate'u o ayın belirli bir gününde iade etmek için atDay(dayOfMonth) numaralı telefonu arayabilirsiniz. O LocalDate ile, daha sonra çağırabilirsiniz:

  • getDayOfMonth() bir int olarak ayın gününü geri almak için; Bir haftanın gününü DayOfWeek olarak almak için
  • getDayOfWeek(). Bu, haftanın tüm günlerinin bir numaralandırmasıdır. Bu itibarla

, sen LocalDate s yerine Integer s tutmak için Dayes listesini değiştirmelidir ve sonra olabilir, örneğin:

YearMonth yearMonthObject = YearMonth.of(year, month); 
int daysOfCurrentMonth = yearMonthObject.lengthOfMonth(); 

ArrayList<LocalDate> dayes = new ArrayList<LocalDate>(); 
for(int i = 1; i <= daysOfCurrentMonth; i++){ 
    dayes.add(yearMonthObject.atDay(i)); 
} 

dayes.forEach(value -> System.out.println(value.getDayOfMonth() + " " + value.getDayOfWeek())); 

Bu izler o ayın her gününü yazdırır haftanın ilgili günü.

Bir yan not olarak, getDisplayName(style, locale) numaralı telefonu arayarak haftanın günü için (yukarıdaki gibi name() yerine) gerçek bir görüntü değeri alabilirsiniz. Stil, günlerin nasıl yazılacağını gösterir (uzun biçim, kısa biçim ...) ve yerel ayar, görünen ad için kullanılacak yerel ayardır. Bir örnek olacaktır:

value.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH) 

hangi çıktılayacaktır İngilizce haftanın günü tam metnini. Yukarıdaki değişikliği ile 04/2016 için Örnek çıktı:

1 Friday 
2 Saturday 
3 Sunday 
4 Monday 
5 Tuesday 
+0

Cevabınız çok detaylı ve çözümleyiciydi. Teşekkürler – dios231

0

Bu 'hack' çözümün biraz olabilir, ancak herhangi bir yıl için bir takvim yapmaya çalışıyorsanız, kullanmak gerekebilir bir 'çapa tarihi' (1 Ocak 1800 gibi Çarşamba). Daha sonra 1 Ocak 1800 ile şu andaki yıl/ay/gün arasındaki gün sayısını hesaplayabilirsiniz. Kaç gün geçtiğini anladıktan sonra, Modular 7'yi kullanarak hangi günü belirledikten sonra o ay için takvimi doldurabilirsiniz.

+0

Bu yaklaşım, "1 Ocak 1800 ve şu anki yıl/ay/gün arasında gerçekleşen gün sayısını hesaplamak" şaşırtıcı bir şekilde karmaşık olabilir sorun var. Zaman dilimleri politik kararlardan dolayı zaman zaman değişiyor. – Hulk