14

指定された月と年の最初の日付と最後の日付を取得しようとしています。次のコードを使用して、yyyyMMddの形式で最終日を取得しました。しかし、このフォーマットを取得できませんでした。また、同じ形式の開始日が必要です。私はまだこれに取り組んでいます。誰かが以下のコードを修正するのを手伝ってくれますか?

public static java.util.Date calculateMonthEndDate(int month, int year) {
    int[] daysInAMonth = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int day = daysInAMonth[month];
    boolean isLeapYear = new GregorianCalendar().isLeapYear(year);

    if (isLeapYear && month == 2) {
        day++;
    }
    GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
    java.util.Date monthEndDate = new java.util.Date(gc.getTime().getTime());
    return monthEndDate;
}

public static void main(String[] args) {
    int month = 3;
    int year = 2076;
    final java.util.Date calculatedDate = calculateMonthEndDate(month, year);
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
    format.format(calculatedDate);
    System.out.println("Calculated month end date : " + calculatedDate);
} 
4

9 に答える 9

21
于 2015-09-01T02:23:29.187 に答える
8

Simply you can use Calendar class. you should assign month variable which month you want

        Calendar gc = new GregorianCalendar();
        gc.set(Calendar.MONTH, month);
        gc.set(Calendar.DAY_OF_MONTH, 1);
        Date monthStart = gc.getTime();
        gc.add(Calendar.MONTH, 1);
        gc.add(Calendar.DAY_OF_MONTH, -1);
        Date monthEnd = gc.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");

        System.out.println("Calculated month start date : " + format.format(monthStart));
        System.out.println("Calculated month end date : " + format.format(monthEnd));
于 2015-04-17T12:25:12.330 に答える
7

First day:

Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH);

Last day of month:

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
于 2017-01-04T16:05:24.363 に答える
5
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.format(calculatedDate);
System.out.println("Calculated month end date : " + calculatedDate);

に変更します

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formattedDate =  format.format(calculatedDate);
System.out.println("Calculated month end date : " + formattedDate);

詳細については

http://docs.oracle.com/javase/1.5.0/docs/api/java/text/DateFormat.html#format(java.util.Date)

別のアプローチ

package com.shashi.mpoole;

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

public class DateMagic {

     public static String PATTERN = "yyyyMMdd";

     static class Measure {
           private int month;
           private int year;
           private Calendar calendar;

           public Measure build() {

                calendar = Calendar.getInstance();
                calendar.set(year, month, 1);

                return this;
           }

           public Measure(int year, int month) {
                this.year(year);
                this.month(month);
           }

           public String min() {
                  return format(calendar.getActualMinimum(Calendar.DATE));
           }

           public String max() {
                  return format(calendar.getActualMaximum(Calendar.DATE));
           }

           private Date date(GregorianCalendar c) {
                  return new java.util.Date(c.getTime().getTime());

           }

           private GregorianCalendar gc(int day) {
                  return new GregorianCalendar(year, month, day);
           }

           private String format(int day) {

                  SimpleDateFormat format = new SimpleDateFormat(PATTERN);
                  return format.format(date(gc(day)));
           }

           public void month(int month) {
                  this.month = month - 1;
           }

           public void year(int year) {
                  this.year = year;
           }
      }

      public static void main(String[] args) {

             Measure measure = new Measure(2020, 6).build();

             System.out.println(measure.min());
             System.out.println(measure.max());

        
    }

}
于 2013-01-23T08:47:08.187 に答える
5

To get the Start Date

    GregorianCalendar gc = new GregorianCalendar(year, month-1, 1);
    java.util.Date monthEndDate = new java.util.Date(gc.getTime().getTime());
    System.out.println(monthEndDate);

(Note : in the Start date the day =1)

for the formatted

SimpleDateFormat format = new SimpleDateFormat(/////////add your format here);
System.out.println("Calculated month end date : " + format.format(calculatedDate));
于 2013-01-23T09:02:21.977 に答える
4

Try below code for last day of month : -

Calendar c = Calendar.getInstance();      
c.set(2012,3,1); //------>  
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));  

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
System.out.println(sdf.format(c.getTime())); 

http://www.coderanch.com/t/385759/java/java/date-date-month

于 2013-12-13T05:31:45.173 に答える
2

Although, not exactly the answer for the OP question, below methods will given current month first & last dates as Java 8+ LocalDate instances.

public static LocalDate getCurrentMonthFirstDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).withDayOfMonth(1);
}

public static LocalDate getCurrentMonthLastDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).plusMonths(1).withDayOfMonth(1).minusDays(1);
}

Side note: Using LocalDate.ofEpochDay(...) instead of LocalDate.now() gives much improved performance. Also, using the millis-in-a-day expression instead of the end value, which is 86400000 is performing better. I initially thought the latter would perform better than the the expression :P

Why this answer: Even this is not a correct answer for OP question, I m still answering here as Google showed this question when I searched for 'java 8 get month start date' :)

于 2015-04-29T18:24:14.853 に答える
1
        GregorianCalendar gc = new GregorianCalendar(year, selectedMonth-1, 1);
           java.util.Date monthStartDate = new java.util.Date(gc.getTime().getTime());
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(monthStartDate);
        calendar.add(calendar.MONTH, 1);
        calendar.add(calendar.DAY_OF_MONTH, -1);
           java.util.Date monthEndDate = new java.util.Date(calendar.getTime())
于 2014-09-01T06:23:21.960 に答える
0
public static Date[] getMonthInterval(Date data) throws Exception {

    Date[] dates = new Date[2];

    Calendar start = Calendar.getInstance();
    Calendar end = Calendar.getInstance();

    start.setTime(data);
    start.set(Calendar.DAY_OF_MONTH, start.getActualMinimum(Calendar.DAY_OF_MONTH));
    start.set(Calendar.HOUR_OF_DAY, 0);
    start.set(Calendar.MINUTE, 0);
    start.set(Calendar.SECOND, 0);

    end.setTime(data);
    end.set(Calendar.DAY_OF_MONTH, end.getActualMaximum(Calendar.DAY_OF_MONTH));
    end.set(Calendar.HOUR_OF_DAY, 23);
    end.set(Calendar.MINUTE, 59);
    end.set(Calendar.SECOND, 59);

    //System.out.println("start "+ start.getTime());
    //System.out.println("end   "+ end.getTime());

    dates[0] = start.getTime();
    dates[1] = end.getTime();

    return dates;
}
于 2018-05-07T08:46:35.167 に答える