Java에서 현재 날짜에 한 달을 어떻게 추가합니까?


답변:


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

고맙습니다 piyush, 그리고이 cal 날짜 형식, 나는 이것을 mysql에 저장해야합니다
kiran

날짜에 대한 mysql 데이터 유형은 DATETIME입니다.
kiran

내가 mysql에 저장하는 데 사용할 수있는 cal 반환이 정확한 날짜 형식입니다
kiran

1
원하는 형식으로 현재 날짜에 월을 추가하는 Java 코드는 다음과 같습니다. 이제이 문자열을 날짜로 변환하고 MYSql 데이터베이스에 삽입 할 수 있습니다. DateFormat 생성자 또는 나중에 STR_TO_DATE (str, format) 함수를 사용하여 MYSQL 쿼리에서 날짜 형식을 변경할 수 있습니다. DateFormat 포맷터 = new SimpleDateFormat ( "yyyy-MM-dd hh : mm : ss"); 지금 달력 = Calendar.getInstance (); now.add (Calendar.MONTH, 1); 문자열 dateString = formatter.format (now.getTime ());
Piyush Mattoo

3
이것은 지금 구식입니다 : stackoverflow.com/questions/4905416/…
softarn

50

자바 8

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

1
java.util.Date : Date.from ((LocalDate.now (). plusMonths (1)). atStartOfDay (). atZone (ZoneId.systemDefault ()). toInstant ())
Ismail Yavuz


29

tl; dr

LocalDate::plusMonths

예:

LocalDate.now( )
         .plusMonths( 1 );

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

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

java.time

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 다음과 같은 기존의 번잡 한 날짜 - 시간의 수업을 대신하는 java.util.Date, .Calendar, java.text.SimpleDateFormat. Joda 타임 팀은 java.time로 마이그레이션을 조언한다.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오.

많은 java.time 기능은 자바 6 7 백 포팅 ThreeTen - 백 포트 및 상기 안드로이드 적응 ThreeTenABP .

날짜 만

데이트 전용을 원한다면 LocalDate수업을 사용하십시오 .

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

today.toString () : 2017-01-23

한 달을 추가하십시오.

LocalDate oneMonthLater = today.plusMonths( 1 );

oneMonthLater.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아니므로 java.time이 시간을 결정하도록하십시오.

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

java.time 정보

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

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

ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


Joda-Time

업데이트 : Joda-Time 프로젝트는 이제 유지 관리 모드입니다. 팀은 java.time 클래스로의 마이그레이션을 조언합니다. 이 섹션은 후손을 위해 그대로 둡니다.

Joda 타임 라이브러리는 현명한 방법으로 달을 추가 할 수있는 방법을 제공합니다.

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

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

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();

12
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

6

(덕구 각색)

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

6

calander를 사용하고이 코드를 시도하십시오.

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();

5
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 ;
}`

큰 코드 블록이 아니라 코드가 수행하는 작업에 대해 설명해 주시겠습니까?
Necoras 2017-04-05

내 코드는 더 제한적이고 더 일반적입니다. 고정 형식 "MM / dd / yyyy"를 사용하여 날짜 (문자열 형식) 만 처리하므로 좀 더 제한적입니다. 일반적인 이유는 지정된 날짜에 양의 달을 추가 할 수 있기 때문입니다.
DJAM Silvère Gatien

따라서 java.util.Date를 취하고 한 달을 추가 한 후 다른 java.util.Date를 렌더링하는 덜 제한적인 코드가 필요한 경우 아래를 참조하십시오. Calendar cal = Calendar.getInstance (); cal.setTime (날짜); cal.add (Calendar.MONTH, 1); cal.getTime ();
DJAM Silvère Gatien


2

한 줄짜리 (예 : Jasper Reports 공식)가 필요하고 조정이 정확히 한 달이 아니어도 상관하지 않는 경우 (예 : "30 일"이면 충분합니다) :

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


단순 정수로 처리되고 음수로 넘칠 경우 숫자에 'L'접미사를 추가하는 것을 잊지 마십시오!
Nicolas Buquet

1

다음과 같이 사용할 수 있습니다.

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);

* @deprecated JDK 버전 1.1부터 *는 <code> Calendar.set (Calendar.MONTH, int month) </ code>로 대체되었습니다. Date.java가 말했듯이.
Jasper Lankhorst

1

한 달이 지난 다음 날을 찾으려면 오늘이 어떤 요일인지 살펴볼 필요가 있습니다.

따라서 날짜가 월의 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);
    }

참고로, 같은 몹시 귀찮은 날짜 - 시간 수업 java.util.Date, java.util.Calendar그리고 java.text.SimpleDateFormat지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque


0

이 메서드는 현재 날짜에 1 개월을 더한 값을 반환합니다.

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

-3
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

1
우선 OP에 따라 답이 잘못되었습니다. 두 번째 OP는 8 (!) 년 전에 답변되었으며 세 번째로 많은 문자열을 사용하는 것보다 날짜 출력 형식을 지정하는 더 좋은 방법이 있습니다.
Markus Deibel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.