75

私の入力文字列の日付は次のとおりです。

String date = "1/13/2012";

私は以下のように月を取得しています:

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date convertedDate = dateFormat.parse(date);
String month = new SimpleDateFormat("MM").format(convertedDate);

しかし、特定の文字列の日付でその月の最後の暦日を取得するにはどうすればよいですか?

例:文字列"1/13/2012"の場合、出力は。でなければなりません"1/31/2012"

4

16 に答える 16

184

Java8以降。

convertedDate.getMonth().length(convertedDate.isLeapYear())whereを使用することによりconvertedDate、のインスタンスですLocalDate

String date = "1/13/2012";
LocalDate convertedDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("M/d/yyyy"));
convertedDate = convertedDate.withDayOfMonth(
                                convertedDate.getMonth().length(convertedDate.isLeapYear()));

Java7以下。

getActualMaximumの方法を使用してjava.util.Calendar

String date = "1/13/2012";
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date convertedDate = dateFormat.parse(date);
Calendar c = Calendar.getInstance();
c.setTime(convertedDate);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
于 2012-11-29T11:13:45.317 に答える
31

これはあなたのニーズのようです:

http://obscuredclarity.blogspot.de/2010/08/get-last-day-of-month-date-object-in.html

コード:

import java.text.DateFormat;  
import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Calendar;  
import java.util.Date;  

//Java 1.4+ Compatible  
//  
// The following example code demonstrates how to get  
// a Date object representing the last day of the month  
// relative to a given Date object.  

public class GetLastDayOfMonth {  

    public static void main(String[] args) {  

        Date today = new Date();  

        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(today);  

        calendar.add(Calendar.MONTH, 1);  
        calendar.set(Calendar.DAY_OF_MONTH, 1);  
        calendar.add(Calendar.DATE, -1);  

        Date lastDayOfMonth = calendar.getTime();  

        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
        System.out.println("Today            : " + sdf.format(today));  
        System.out.println("Last Day of Month: " + sdf.format(lastDayOfMonth));  
    }  

} 

出力:

Today            : 2010-08-03  
Last Day of Month: 2010-08-31  
于 2012-11-29T11:16:18.900 に答える
22

Java 8 java.time.LocalDate を使用して

String date = "1/13/2012";
LocalDate lastDayOfMonth = LocalDate.parse(date, DateTimeFormatter.ofPattern("M/dd/yyyy"))
       .with(TemporalAdjusters.lastDayOfMonth());
于 2016-11-19T04:56:29.413 に答える
7

Java 8 DateTime/の場合LocalDateTime:

String dateString = "01/13/2012";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US); 
LocalDate date = LocalDate.parse(dateString, dateFormat);       
ValueRange range = date.range(ChronoField.DAY_OF_MONTH);
Long max = range.getMaximum();
LocalDate newDate = date.withDayOfMonth(max.intValue());
System.out.println(newDate); 

また

String dateString = "01/13/2012";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US); 
LocalDate date = LocalDate.parse(dateString, dateFormat);
LocalDate newDate = date.withDayOfMonth(date.getMonth().length(date.isLeapYear()));
System.out.println(newDate);

出力:

2012-01-31

LocalDateTimeLocalDate日付文字列に時間情報がある場合の代わりに使用する必要があります。IE2015/07/22 16:49

于 2015-07-30T09:39:46.103 に答える
3

最も簡単な方法は、新しいGregorianCalendarインスタンスを構築することです。以下を参照してください。

Calendar cal = new GregorianCalendar(2013, 5, 0);
Date date = cal.getTime();
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("Date : " + sdf.format(date));

出力:

Date : 2013-05-31

注意:

month カレンダーの MONTH カレンダー フィールドの設定に使用される値。月の値は 0 ベースです。たとえば、1 月は 0 です。

于 2013-08-09T05:35:49.330 に答える
1

次のコードを使用して、月の最終日を取得できます

public static String getLastDayOfTheMonth(String date) {
        String lastDayOfTheMonth = "";

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
        try{
        java.util.Date dt= formatter.parse(date);
        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(dt);  

        calendar.add(Calendar.MONTH, 1);  
        calendar.set(Calendar.DAY_OF_MONTH, 1);  
        calendar.add(Calendar.DATE, -1);  

        java.util.Date lastDay = calendar.getTime();  

        lastDayOfTheMonth = formatter.format(lastDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return lastDayOfTheMonth;
    }
于 2016-06-29T13:30:11.897 に答える
1
            String givenStringDate ="07/16/2020";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
        java.util.Date convertedUtillDate;
            /*
             * If your output requirement is in LocalDate format use below snippet
             * 
             */
            LocalDate localDate =LocalDate.parse(givenStringDate, formatter);
            LocalDate localDateLastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());

            /*
             * If your output requirement is in Calendar format use below snippet
             * 
             */
            convertedUtillDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
            Calendar calendarLastDayOfMonth = Calendar.getInstance();
            calendarLastDayOfMonth.setTime(convertedUtillDate);
            int lastDate = calendarLastDayOfMonth.getActualMaximum(Calendar.DATE);
            calendarLastDayOfMonth.set(Calendar.DATE, lastDate);

Java 1.8 でテスト済み。これが誰かに役立つことを願っています。

于 2020-05-26T12:16:11.640 に答える
-1

を使用しGregorianCalendarます。オブジェクトの日付を設定してから、を使用しますgetActualMaximum(Calendar.DAY_IN_MONTH)

http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html#getActualMaximum%28int%29(ただし、Java 1.4でも同じでした)

于 2012-11-29T11:13:29.330 に答える
-3

JasperServer レポートでこのワンライナーを使用します。

new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyy-MM-dd").parse(new java.util.Date().format('yyyy') + "-" + (new Integer (new SimpleDateFormat("MM").format(new Date()))+1) + "-01")-1)

見栄えはよくありませんが、私にとってはうまくいきます。基本的には、現在の月に 1 を加算し、その月の最初の日を取得して 1 日を減算します。

于 2015-02-27T15:53:47.167 に答える