programing

Java에서 현재 날짜에 1개월을 추가하려면 어떻게 해야 하나요?

randomtip 2023. 1. 15. 12:53
반응형

Java에서 현재 날짜에 1개월을 추가하려면 어떻게 해야 하나요?

자바에서는 어떻게 하면 현재 날짜에 한 달을 추가할 수 있나요?

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);

자바 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

Apache의 공용 lang DateUtils 도우미 유틸리티 클래스를 사용할 수 있습니다.

Date newDate = DateUtils.addMonths(new Date(), 1);

Commons lang jar는 http://commons.apache.org/proper/commons-lang/ 에서 다운로드할 수 있습니다.

dr;dr

LocalDate::plusMonths

예를 들어:

LocalDate.now( )
         .plusMonths( 1 );

표준 시간대를 지정하는 것이 좋습니다.

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 다음과 같은 번거로운 날짜 시간 클래스를 대체합니다.java.util.Date,.Calendar & , »java.text.SimpleDateFormatJoda-Time 팀은 java.time으로의 이행도 조언합니다.

자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.

java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및7에 백포트되며 ThreeTenABP의 Android에 더욱 적응합니다.

날짜만

" " 를 합니다.LocalDate를 누릅니다

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );

today.toString(): 2017-01-23

한 달을 더하다.

LocalDate oneMonthLater = today.plusMonths( 1 );

1 MonthLater.toString(): 2017-02-23

날짜 시간

아마도 당신은 날짜와 함께 하루 중 시간을 원할 것이다.

먼저 분해능이 나노초인 UTC의 현재 모멘트를 가져옵니다.

Instant instant = Instant.now();

월을 더하는 것은 날짜를 결정하는 것을 의미합니다.그리고 날짜를 결정하는 것은 시간대를 적용하는 것을 의미합니다.어느 순간이든, 날짜는 전 세계적으로 다양하며, 새로운 날이 더 일찍 동쪽에서 밝아온다. 그 '어느 정도'를 조정해 .Instant타임 존으로 이동합니다.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

이제 월을 추가합니다.java.time에서 윤달과 월의 길이가 다르다는 사실을 처리하도록 합니다.

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );

이러한 계산을 할 때는 하루 중 시간을 하루 중 첫 번째 시간으로 조정하는 것이 좋습니다. 첫 번째 그런 것은 .00:00:00.0 javatime을 합니다.

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

java.time 정보

java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.

자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.

현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.

java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.

java.time 클래스는 어디서 얻을 수 있습니까?


조다 타임

업데이트: Joda-Time 프로젝트가 유지 보수 모드로 전환되었습니다.팀은 java.time 클래스로의 이행을 조언합니다.나는 후세를 위해 이 부분을 그대로 둔다.

Joda-Time 라이브러리는 달을 스마트하게 추가하는 방법을 제공합니다.

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );

하루 중 시간을 하루의 첫 번째 순간으로 조정하여 하루를 집중시킬 수 있습니다.

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

(Duggu에서 채택)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

캘린더를 사용하여 이 코드를 사용해 보십시오.

Calendar calendar = Calendar.getInstance();         
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();

org.apache.commons.lang3에서 DateUtils 클래스를 사용할 수 있습니다.타임 패키지

DateUtils.addMonths(new Date(),1);
public Date  addMonths(String dateAsString, int nbMonths) throws ParseException {
        String format = "MM/dd/yyyy" ;
        SimpleDateFormat sdf = new SimpleDateFormat(format) ;
        Date dateAsObj = sdf.parse(dateAsString) ;
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateAsObj);
        cal.add(Calendar.MONTH, nbMonths);
        Date dateAsObjAfterAMonth = cal.getTime() ;
    System.out.println(sdf.format(dateAsObjAfterAMonth));
    return dateAsObjAfterAMonth ;
}`

이 메서드는 현재 날짜와 1개월을 반환합니다.

public Date  addOneMonth()  {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        return cal.getTime();
}`

원라이너(예: Jasper Reports 공식)가 필요하고 조정이 정확히 한 달이 아니더라도 상관하지 않는 경우(예: "30일"이면 충분함):

new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)

Java 8 이상 버전에서는 LocalDate 클래스의 plusMonths() 메서드를 사용합니다.

// 현재 로컬 날짜에 1개월 추가

LocalDate localDate = LocalDate.now().plusMonths(1);

// 임의의 로컬 날짜 개체에 1개월 추가

LocalDate localDate = LocalDate.parse("2022-02-14").plusMonths(1); // 2022-03-14

참고 자료: https://www.javaexercise.com/java/java-add-months-to-date

이렇게 사용할 수 있습니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String d = "2000-01-30";
Date date= new Date(sdf.parse(d).getTime());
date.setMonth(date.getMonth() + 1);

한 달 후 다음 날을 찾으려면 오늘이 몇 월 며칠인지 살펴봐야 합니다.

따라서 해당 날이 월의 첫 번째 날일 경우 다음 코드를 실행합니다.

Calendar calendar = Calendar.getInstance();

    Calendar calFebruary = Calendar.getInstance();
    calFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);

    if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {// if first day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    Date nextMonthFirstDay = calendar.getTime();
    System.out.println(nextMonthFirstDay);

    }

날짜가 월말일 경우 다음 코드를 실행합니다.

    else if ((calendar.getActualMaximum(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH))) {// if last day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);
    }

날짜가 2월인 경우 코드를 따라 실행합니다.

    else if (calendar.get(Calendar.MONTH) == Calendar.JANUARY
            && calendar.get(Calendar.DAY_OF_MONTH) > calFebruary.getActualMaximum(Calendar.DAY_OF_MONTH)) {// control of february

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);

    }

다음 코드는 다른 경우에 사용됩니다.

    else { // any day
    calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date theNextDate = calendar.getTime();
    System.out.println(theNextDate);
    }
    Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();
 public Date addMonth(Date inputDate, int monthToAddNumber){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(inputDate);
        // Add 'monthToAddNumber' months to inputDate
        calendar.add(Calendar.MONTH, monthToAddNumber);
        return calendar.getTime();
    }
  

콜 방식:

addMonth(new Date(), 1)

상수는 포르투갈어로 표시되지만 javadoc은 충분히 이해할 수 있습니다.

그냥 전화하세요.

Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
DateSumUtil.sumOneMonth(cal);

그건 끝이다.관련 코드:

package you.project.your_package_utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

public class DateSumUtil {

    private static Integer[] meses31 = { 2, 4, 7, 9 };
    private static List<Integer> meses31List = Arrays.asList(meses31);
    private static SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");

    private static final int MES = Calendar.MONTH;
    private static final int ANO = Calendar.YEAR;
    private static final int DIA = Calendar.DAY_OF_MONTH;

    /**
     * Receives a date and adds one month. <br />
     * 
     * @param c date to receive an added month, as {@code java.util.Calendar}
     * @param dia day of month of the original month
     */
    public static void addOneMonth(Calendar c, int dia) throws ParseException {
    if (cal.get(MES) == 0) {            if (dia < 29)           cal.add(MES, 1);
        else {  if (cal.get(ANO) % 4 == 0) {    if (dia < 30)   cal.add(MES, 1);
                                                else            cal.setTime(s.parse("29/02/" + cal.get(ANO)));
                } else {                        if (dia < 29)   cal.add(MES, 1);
                                                else            cal.setTime(s.parse("28/02/" + cal.get(ANO)));
    }   }   } else if (meses31List.contains(cal.get(MES))) {
        if (dia < 31) {                                         cal.add(Calendar.MONTH, 1);
                                                                cal.set(DIA, dia);
        } else  cal.setTime(s.parse("30/" + (cal.get(MES) + 2) + "/" + cal.get(ANO)));
    } else {                                                    cal.add(MES, 1);
                                                                cal.set(DIA, dia);  }   
}
public class StringSplit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        date(5, 3);
        date(5, 4);
    }

    public static String date(int month, int week) {
        LocalDate futureDate = LocalDate.now().plusMonths(month).plusWeeks(week);
        String Fudate = futureDate.toString();
        String[] arr = Fudate.split("-", 3);
        String a1 = arr[0];
        String a2 = arr[1];
        String a3 = arr[2];
        String date = a3 + "/" + a2 + "/" + a1;
        System.out.println(date);
        return date;
    }
}

출력:

10/03/2020
17/03/2020

언급URL : https://stackoverflow.com/questions/4905416/how-do-i-add-one-month-to-current-date-in-java

반응형