주어진 날짜 객체를 어떻게 확인할 수 있는 지난날의 달?

StackOverflow https://stackoverflow.com/questions/72381

  •  09-06-2019
  •  | 
  •  

문제

내가 사용하려고 다음과 같은 코드만의 반환하는 잘못된 날짜.

Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.MONTH, sampleDay.get(Calendar.MONTH)+1);
cal.set(Calendar.DAY_OF_MONTH, 0);
return cal.getTime();
도움이 되었습니까?

해결책

의 수를 얻을 일에 대한 이번 달:


Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
int noOfLastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

설정의 일정을 마지막 날이 한 달:


Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));

다른 팁

내가 만드는 날짜 객체에 대한 첫 번째 날의 다음달,그리고 다 빼일 날짜로부터 개체입니다.

tl;박사

YearMonth.from(
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
).atEndOfMonth()

java.시간

질문과 다른 답변을 오래 사용하는 시대에 뒤떨어진다.그들은 대체 java.시간 클래스 내장으로 Java8 니다.보 Oracle 튜토리얼.의 많은 기능을 다시 체험하 Java6&7 ThreeTen-백 포트 고 더 적응을 안드로이드 ThreeTenABP.

LocalDate

LocalDate 클래스를 나타내는 날짜만 값없이 시간과 시간이없는 영역입니다.이러한 객체 저장 시간대,시간 영역을 결정하는 중요한 현재 날짜입니다.모든 주어진 순간에 날짜까지 다양하는 전세계하여 시간 영역입니다.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );  // 2016-06-25

YearMonth

결과 YearMonth 클래스를 확인의 마지막 날은 어떤 달입니다.

YearMonth currentYearMonth = YearMonth.from( today );  // 2016-06
LocalDate lastDayOfCurrentYearMonth = currentYearMonth.atEndOfMonth();  // 2016-06-30

에 의해 방법을 모두 LocalDateYearMonth 사용 달 번호는 당신이 기대하는 것처럼(1-12)보다는 스크루 0-11 에서 볼 수 오래된 날짜간 클래스입니다.중 하나 많은 가난한 디자인 결정을 내는 그 오래된 날짜간 클래스에서는 번잡하고 혼란스럽습니다.

TemporalAdjuster

또 다른 유효한 접근 방식은 사용 TemporalAdjuster.보 올바른 대답하여 피에르 헨리.

사용 calObject.getActualMaximum(calobject.DAY_OF_MONTH)

실제의 Java 방법 더 많은 정보를 원합니다.

그것은 다음과 같이 설정할 일정하는 첫 번째 날의 다음달,그래서 당신은 하나가 필요 더 많은 라인을 빼는 하루를 얻으려면,마지막 날은 달의 sampleDay 에서는:

Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.roll(Calendar.MONTH, true);
cal.set(Calendar.DAY_OF_MONTH, 0);
cal.add(Calendar.DAY_OF_MONTH, -1);

일반적으로,그것은 훨씬 쉽게 이런 종류의 것 사용 시간 Joda, 예를 들어:

DateTime date = new DateTime(sampleDay.getTime());
return date.plusMonths(1).withDayOfMonth(0).minusDays(1).getMillis();

TemporalAdjuster

를 사용하여(상대적으로) 새로운 Java 날짜 API,그것은 실제로 매우 쉽습니다:

date 야의 인스턴스 LocalDate, 예를 들어:

LocalDate date = LocalDate.of(2018, 1, 22);

LocalDate date = LocalDate.now();

거나,물론 당신은 그것을 얻을 수 있으로 사용자 입력,데이터베이스에서,등등.

적용 후의 구현 TemporalAdjuster 인터페이스에서 찾을 TemporalAdjusters 클래스:

LocalDate first = date.with(TemporalAdjusters.firstDayOfMonth());
LocalDate last = date.with(TemporalAdjusters.lastDayOfMonth());

당신이 사용하는 경우 date4j 라이브러리:

DateTime monthEnd = dt.getEndOfMonth();

제 생각이 잘 작동:

Dim MyDate As Date = #11/14/2012#  'This is just an example date

MyDate = MyDate.AddDays(DateTime.DaysInMonth(MyDate.Year, MyDate.Month) - MyDate.Day)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top