JodaTime ile belirli bir ayın son tarihi nasıl alınır?


110

org.joda.time.LocalDateBir ayın ilk ve son tarihini almam gerekiyor . İlkini almak önemsizdir, ancak sonuncuyu almak biraz mantığa ihtiyaç duyuyor gibi görünüyor, çünkü aylar farklı uzunluklara sahip ve Şubat uzunluğu yıllar içinde bile değişiyor. Bunun için zaten JodaTime'da yerleşik bir mekanizma var mı yoksa onu kendim mi uygulamalıyım?


2
Sadece bir DateTime
uyarı

Yanıtlar:


222

Peki ya:

LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();

dayOfMonth()LocalDate.Property"ayın günü" alanını kaynağını bilecek şekilde temsil eden bir döndürür LocalDate.

Olduğu gibi, bu belirli görev için önermek için withMaximumValue()yöntem bile belgelenmiştir :

Bu işlem, ay uzunlukları değiştiğinden, ayın son gününde bir Yerel Tarih almak için kullanışlıdır.

LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();

1
@Jon Skeet Java 8'in yeni Tarih ve Saat API'sini kullanarak bunu nasıl elde edebilirim?
Warren M.Nocos

5
@ WarrenM.Nocos: Kullanırımdt.with(TemporalAdjusters.lastDayOfMonth())
Jon Skeet

4

Başka bir basit yöntem şudur:

//Set the Date in First of the next Month:
answer = new DateTime(year,month+1,1,0,0,0);
//Now take away one day and now you have the last day in the month correctly
answer = answer.minusDays(1);

4
ayınız = 12 ise ne olur?
jon

JodaTime API, sofistike, tam yüklü ve kullanışlı bir çalışma parçasıdır. Bunu başarmanın daha birçok doğru yolu var.
aaiezza

Ay 12 ise, son günün 31 olduğunu biliyorsun değil mi? sadece şöyle bir şey koyun: if (ay <12) {cevap = yeni DateTime (yıl, ay + 1,1,0,0,0); answer = answer.minusDays (1); } başka cevap = 31;
Abraham Maldonado Barrios

1

Eski bir soru, ama bunu aradığımda en iyi google sonucu.

Birisinin intJodaTime yerine gerçek son güne ihtiyacı varsa, bunu yapabilirsiniz:

public static final int JANUARY = 1;

public static final int DECEMBER = 12;

public static final int FIRST_OF_THE_MONTH = 1;

public final int getLastDayOfMonth(final int month, final int year) {
    int lastDay = 0;

    if ((month >= JANUARY) && (month <= DECEMBER)) {
        LocalDate aDate = new LocalDate(year, month, FIRST_OF_THE_MONTH);

        lastDay = aDate.dayOfMonth().getMaximumValue();
    }

    return lastDay;
}

1
Biraz daha temiz bir cevap tercih ederdim, örneğin: public static int getLastDayOfMonth (int year, int month) {LocalDate date = new LocalDate (year, month, 1 return date.dayOfMonth (). GetMaximumValue ();} Ama cevabınız biraz dağınık olsa bile süper faydalıdır, yani +1;)
2018

-1

JodaTime kullanarak bunu yapabiliriz:

    public static final Integer CURRENT_YEAR = DateTime.now (). getYear ();

    public static final Tamsayı CURRENT_MONTH = DateTime.now (). getMonthOfYear ();

    public statik son Tamsayı LAST_DAY_OF_CURRENT_MONTH = DateTime.now ()
            . .DayOfMonth () getMaximumValue ();

    public statik son Tamsayı LAST_HOUR_OF_CURRENT_DAY = DateTime.now ()
            . .HourOfDay () getMaximumValue ();

    public statik son Tamsayı LAST_MINUTE_OF_CURRENT_HOUR = DateTime.now (). minuteOfHour (). getMaximumValue ();

    public statik son Tamsayı LAST_SECOND_OF_CURRENT_MINUTE = DateTime.now (). secondOfMinute (). getMaximumValue ();


    genel statik DateTime getLastDateOfMonth () {
        yeni DateTime (CURRENT_YEAR, CURRENT_MONTH,
                LAST_DAY_OF_CURRENT_MONTH, LAST_HOUR_OF_CURRENT_DAY,
                LAST_MINUTE_OF_CURRENT_HOUR, LAST_SECOND_OF_CURRENT_MINUTE);
    }

Burada, github'daki küçük özetimde açıklandığı gibi: Bir çok yararlı fonksiyona sahip bir JodaTime ve java.util.Date Util Sınıfı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.