자바 캘린더를 사용하여 X일을 빼려면 어떻게 해야 하나요?
자바 캘린더를 사용하여 날짜에서 X일을 빼는 간단한 방법을 아는 사람?
자바에서 X일을 직접 빼는 기능을 찾을 수 없었습니다.누가 저를 올바른 방향으로 안내해주실 수 있나요?
다음 문서에서 인용:
일정관리 규칙에 따라 지정된 일정관리 필드에 지정된 시간을 추가하거나 뺍니다.예를 들어 캘린더의 현재 시각에서5일을 빼려면 다음 번호로 호출합니다.
Calendar calendar = Calendar.getInstance(); // this would default to now calendar.add(Calendar.DAY_OF_MONTH, -5).
해서 '아까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까요?add
방법, 이, 이, 이, 이, 이, 이, 이, 이, 이, however, however, however, however, however, however, however, however, however, however, however, however, however, that, that, that, that, that, however, however, however, that,를 사용하지Calendar
과
public static void addDays(Date d, int days)
{
d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}
이 값은 날짜의 타임스탬프 값(에폭 이후 밀리초)을 가져오고 적절한 시간(밀리초)을 추가합니다.days 파라미터에 마이너스 정수를 전달하여 감산을 실행할 수 있습니다.이는 "적절한" 달력 솔루션보다 단순합니다.
public static void addDays(Date d, int days)
{
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
d.setTime( c.getTime().getTime() );
}
두 모두 '어느 쪽이든'이 됩니다.Date
가 완전히 새로운 것을 되었다.Date
어느쪽이든 원하는 경우 다른 방법으로 쉽게 변경할 수 있습니다.
간단한 경우 앤슨의 답변은 문제없지만, 더 복잡한 날짜 계산을 할 경우에는 Joda Time을 체크하는 것이 좋습니다.그것은 당신의 삶을 훨씬 더 편하게 해줄 것입니다.
참고로 Joda Time은
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
dr;dr
LocalDate.now().minusDays( 10 )
표준 시간대를 지정하는 것이 좋습니다.
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
세부 사항
에 번들된 날짜 시간 예: "Java " " )java.util.Date
/.Calendar
번거롭고 혼란스러우며 결함이 있는 것으로 판명되었습니다.그들을 피하세요.
java.time
Java 8 이후는 이러한 오래된 클래스를 새로운 java.time 프레임워크로 대체합니다.튜토리얼을 참조해 주세요.JSR 310에서 정의되고 Joda-Time에서 영감을 받아 ThreeTen-Extra 프로젝트에서 확장되었습니다.ThreeTen-Backport 프로젝트는 클래스를 Java 6, 7로 백포트하고 ThreeTenABP 프로젝트는 Android로 전송합니다.
질문이 모호하여 날짜만 묻는 것인지 아니면 날짜 시간을 묻는 것인지 명확하지 않습니다.
LocalDate
날짜만 사용하고 시간(time-of-day)이 없는 경우 클래스를 사용합니다."today"와 같은 날짜를 결정하는 데 중요한 표준 시간대가 있다는 점에 유의하십시오.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
ZonedDateTime
날짜 시간을 의미할 경우 클래스를 사용하여 시간 표시 막대를 UTC로 표시합니다.여기서부터 시간대로 조정하여 객체를 가져옵니다.
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
②.
java.time 클래스는 어디서 얻을 수 있습니까?
- Java SE 8, Java SE 9, Java SE 10 이후
- 붙박이.
- 번들 구현이 포함된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되어 있습니다.
- Java SE 6 및 Java SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 쓰리텐ABP 프로젝트가 ThreeTen-Backport(상기)를 채택하고 있습니다.'쓰리텐ABP 사용방법'을 참조하십시오.
쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 등 유용한 클래스가 있습니다.
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
참조
가 게 addDays
일라이가 제안했듯이, 저는 이 제품을 사용하는 것을 선호합니다.DateUtils
Apache에서.프로젝트에서 여러 곳을 사용해야 하는 경우 특히 유용합니다.
API는 다음과 같습니다.
addDays(Date date, int amount)
새 개체를 반환하는 날짜에 일 수를 추가합니다.
「」가 해 주세요.Date
오브젝트 및 이전 오브젝트 자체에 대한 변경은 하지 않습니다.
그것은 다음과 같이 쉽게 할 수 있다.
Calendar calendar = Calendar.getInstance();
// from current time
long curTimeInMills = new Date().getTime();
long timeInMills = curTimeInMills - 5 * (24*60*60*1000); // `enter code here`subtract like 5 days
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
// from specific time like (08 05 2015)
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.MONTH, (5-1));
calendar.set(Calendar.YEAR, 2015);
timeInMills = calendar.getTimeInMillis() - 5 * (24*60*60*1000);
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
java.time을 사용하면 모든 시간 단위(월, 일, 시간, 분, 초 등)의 감산 또는 덧셈을 깨끗하고 효율적으로 수행할 수 있다고 생각합니다.즉석 수업.
현재 시각에서 5일을 빼고 결과를 날짜로 얻는 예:
new Date(Instant.now().minus(5, ChronoUnit.DAYS).toEpochMilli());
1시간을 빼고 15분을 더하는 또 다른 예시는 다음과 같습니다.
Date.from(Instant.now().minus(Duration.ofHours(1)).plus(Duration.ofMinutes(15)));
정확도가 더 필요한 경우 인스턴스는 최대 나노초까지 측정합니다.나노초 부품을 조작하는 방법:
minusNano()
plusNano()
getNano()
또한 Date는 Instant만큼 정확하지 않습니다.가능하면 Instant 수업에 들어가라고 조언합니다.
1일 전으로 돌아가야 하는 것과 같은 과제에 직면했습니다(전날은 전년 또는 전월로 돌아가도 1일 전으로 돌아갈 수 있어야 합니다).
팔로잉을 했는데, 기본적으로 하루 동안 24시간을 뺍니다. DateInGregorianCalendar.add (캘린더)시간, -24);
그 대신에, 나는 또한 할 수도 있습니다.
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, 2021);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DATE, 1);
System.out.println("Original: " + cal.getTime());
cal.add(Calendar.DATE, -1);
System.out.println("After adding DATE: " + cal.getTime());
출력:
Original: Fri Jan 01 15:08:33 CET 2021
After adding DATE: Thu Dec 31 15:08:33 CET 2020
Joda Time을 추천해 주셔서 - 저는 이 CalendarDate 클래스를 사용하고 있습니다.http://calendardate.sourceforge.net
Joda Time과 다소 경쟁적인 프로젝트이지만, 단 2개의 클래스에서 훨씬 더 기본적입니다.프로젝트보다 더 큰 패키지를 사용하고 싶지 않았기 때문에 매우 편리하고 필요한 용도로도 잘 작동했습니다.Java와 달리 가장 작은 단위는 날짜이기 때문에 실제로는 날짜입니다(밀리초 단위로 줄이지 않음).날짜를 작성하면 myDay.addDays(-5)와 같이 5일 전으로 돌아가기만 하면 됩니다.요일 등을 찾을 때 사용할 수 있습니다.또 다른 예는 다음과 같습니다.
CalendarDate someDay = new CalendarDate(2011, 10, 27);
CalendarDate someLaterDay = today.addDays(77);
그리고:
//print 4 previous days of the week and today
String dayLabel = "";
CalendarDate today = new CalendarDate(TimeZone.getDefault());
CalendarDateFormat cdf = new CalendarDateFormat("EEE");//day of the week like "Mon"
CalendarDate currDay = today.addDays(-4);
while(!currDay.isAfter(today)) {
dayLabel = cdf.format(currDay);
if (currDay.equals(today))
dayLabel = "Today";//print "Today" instead of the weekday name
System.out.println(dayLabel);
currDay = currDay.addDays(1);//go to next day
}
Eli Courtwright의 두 번째 해결책은 틀렸습니다.그것은 다음과 같습니다.
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
언급URL : https://stackoverflow.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java-calendar
'programing' 카테고리의 다른 글
Java 인터페이스/실장 명명 규칙 (0) | 2022.08.30 |
---|---|
Vuejs:는 요소를 숨기기.Vuejs:는 요소를 숨기기.keyup 답변? (0) | 2022.08.30 |
다른 javascript 파일에서 Vuex Getters 호출 (0) | 2022.08.30 |
Vue j spread 구문과 Vuex 사용 (0) | 2022.08.30 |
Vuex 스토어에서 변수 get 수정 (0) | 2022.08.30 |