2012-08-08 35 views
7

Jodatime bir ayın haftalarını hesaplamak mümkün mü?jodatime bir ay boyunca hafta hesaplamak

Ay:

Böyle bir şey ihtiyaç Temmuz Yılın 27

  • Hafta; 1-7.
  • Haftanın Haftası 28; 9-14.
  • Haftalık 29; 16-21.
  • 30. 23-31. Temmuz

Ay: Ağustos Yılın 31

  • Hafta; 1-4.
  • Haftalık 32; 6-11.
  • Haftanın Haftası 33; 13-18.
  • Haftalık 34; 20-25.
  • 35. Hafta; 27-31.

    new LocalDate().weekOfWeekYear()

    Ama ilgili tarihleri ​​nasıl bilmiyorum:

Ağustos Ben böyle joda zamanında Yılın hafta elde biliyorum.

cevap

8

Bir haftanın aralığını almak için, haftanın ilk ve son gününü gösteren bir nesne oluşturun, ardından ayın yalnızca ayını çekin.

int weekOfYear = 32; 

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); 
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(7); 

System.out.println("Week of Year "+weekOfYear+"; "+firstDay.toString("d MMM")+" - "+lastDay.toString("d MMM")); 

Ayrıca gün böyle çıkarabilir:

int weekStart = firstDay.getDayOfMonth(); 
int weekEnd = lastDay.getDayOfMonth(); 

Ardından yanı bir ay içinde hafta almak için aynı tekniği kullanabilirsiniz. '5 Eylül -

int firstWeekInMonth = new LocalDate().withMonthOfYear(month).withDayOfMonth(1).getWeekOfYear(); 
int lastWeekInMonth = new LocalDate().withMonthOfYear(month).dayOfMonth().withMaximalValue().getWeekOfYear(); 

Muhtemelen aksi takdirde '30 gibi şeyler alabilir, ayın aralığında kalacak başlangıç ​​ve bitiş-tarihlerini sınırlamak isteyebilirsiniz.

+0

Bu sadece başarısız her hafta bulmaya çalışmak olduğunu düşünüyorum soruyu cevaplayın (iyi bir ilham kaynağı olsa da), ancak 2 hata içerir: mantıksal olarak, haftanın geçtiği anlamına gelir. lastDay'den, kullanılmayan, ilk değil; Ayrıca, cevap undefined olan "month" değişkenini ifade eder. Açıkça (ama potansiyel olarak kafa karıştırıcı) hataları düzeltmeye yönelik girişimlerim huysuz yorumcular tarafından reddedildi. – Lambart

+0

@Lambart gerçekten haklısınız.Hataları düzelttim ve bu soruya daha iyi cevap vereceğini umduğum bir paragraf ekledim. Editörlerin size izin vermesine izin vermeyin :) –

+0

iyi düzenlemeler ve teşvik için teşekkürler. :) – Lambart

1

sabitleme bazı değişkenler:

int weekOfYear = 32; 

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); 
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(6); 

int weekStart = firstDay.getDayOfMonth();  
int weekEnd = lastDay.getDayOfMonth(); 

System.out.println("Week of Year "+weekOfYear+"; "+weekStart+"-"+weekEnd+" "+month); 
1

Benim çözümüm, diğer cevaplar dikkate

public List<Pair<LocalDate, LocalDate>> getWeeksInMonth(LocalDate data) { 

     int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear(); 
     int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear(); 

     List<Pair<LocalDate, LocalDate>> weeks = new cicero.minhasfinancas.util.array.ArrayList<>(); 
     while (firstWeekInMonth <= lastWeekInMonth) { 

      LocalDate firstDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(1); 
      LocalDate lastDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(7); 
      weeks.add(new Pair<>(firstDay, lastDay)); 
      firstWeekInMonth++; 
     } 

     return weeks; 
    } 

    public class Pair<V1, V2>{ 

     V1 first; 
     V2 second; 

     public Pair(V1 first, V2 second) { 
      this.first = first; 
      this.second = second; 
     } 

     public V1 getFirst() { 
      return first; 
     } 

     public void setFirst(V1 first) { 
      this.first = first; 
     } 

     public V2 getSecond() { 
      return second; 
     } 

     public void setSecond(V2 second) { 
      this.second = second; 
     } 
    } 
0

Bu da

String[] weekDays = {today.withDayOfWeek(DateTimeConstants.MONDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.TUESDAY).getDayOfMonth()+ "", 
      today.withDayOfWeek(DateTimeConstants.WEDNESDAY).getDayOfMonth() + "", 
      today.withDayOfWeek(DateTimeConstants.THURSDAY).getDayOfMonth() + "", 
      today.withDayOfWeek(DateTimeConstants.FRIDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.SATURDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.SUNDAY).getDayOfMonth() +""}; 
İlgili konular