Joda-Time에서 두 날짜 사이의 일수
두 Joda-Time 인스턴스 간의 일수 차이는 어떻게 확인할 수 있습니까?'difference in days'는 시작일과 종료일이 월요일이고 종료일이 화요일인 경우 시작일과 종료일의 시간/분/초에 관계없이 반환값이 1이어야 합니다.
Days.daysBetween(start, end).getDays()
저녁에 시작해서 아침에 끝나는 경우 0이 됩니다.
다른 날짜 필드에도 같은 문제가 있기 때문에 중요하지 않은 필드를 '무시'할 수 있는 일반적인 방법이 있었으면 합니다.
즉, 2월 4일부터 3월 4일까지의 달도 14시 45분부터 15시 12분까지와 마찬가지로 1이 됩니다.그러나 14:01과 14:55 사이의 시간 차이는 0이 됩니다.
유감스럽게도 withTimeAtStartOfDay의 답변은 틀리지만 극히 일부입니다.원하는 것:
Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()
"한밤중/낮의 시작"은 새벽 1시를 의미할 수 있습니다(일부 지역에서는 이렇게 낮 시간 절약이 이루어짐). Days.between은 제대로 처리되지 않습니다.
// 5am on the 20th to 1pm on the 21st, October 2013, Brazil
DateTimeZone BRAZIL = DateTimeZone.forID("America/Sao_Paulo");
DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, BRAZIL);
DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, BRAZIL);
System.out.println(daysBetween(start.withTimeAtStartOfDay(),
end.withTimeAtStartOfDay()).getDays());
// prints 0
System.out.println(daysBetween(start.toLocalDate(),
end.toLocalDate()).getDays());
// prints 1
경유하다LocalDate
모든 문제를 회피합니다.
Days
학급
메소드와 함께 클래스를 사용하면 다음과 같이 동작합니다.
Days.daysBetween(start.withTimeAtStartOfDay() , end.withTimeAtStartOfDay() ).getDays()
다음을 사용할 수 있습니다.
Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays()
dr;dr
java.time.temporal.ChronoUnit.DAYS.between(
earlier.toLocalDate(),
later.toLocalDate()
)
…혹은…
java.time.temporal.ChronoUnit.HOURS.between(
earlier.truncatedTo( ChronoUnit.HOURS ) ,
later.truncatedTo( ChronoUnit.HOURS )
)
java.time
참고로 Joda-Time 프로젝트는 현재 유지보수 모드에 있으며 팀은 java.time 클래스로의 이행을 권고하고 있습니다.
Joda-Time과 동등DateTime
이ZonedDateTime
.
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
날짜를 날짜로 세고 싶으시군요. 즉, 하루 중 시간을 무시하고 싶으시군요.예를 들어 0시 1분 전에 시작하여 0시 1분 후에 종료하면 하루가 됩니다.이 동작에 대해서는,LocalDate
에서ZonedDateTime
클래스는 시간대 및 시간대를 포함하지 않는 날짜 전용 값을 나타냅니다.
LocalDate localDateStart = zdtStart.toLocalDate() ;
LocalDate localDateStop = zdtStop.toLocalDate() ;
경과 일수 또는 기타 단위를 계산하려면 열거를 사용합니다.
long days = ChronoUnit.DAYS.between( localDateStart , localDateStop ) ;
잘라내다
60분의 시간 간격의 완전한 시간이 아닌 시간 단위의 델타 시간에 관심이 있는 경우 이 계산을 수행하는 보다 일반적인 방법에 대해 질문할 경우 다음을 사용하십시오.truncatedTo
방법.
같은 날 14:45~15:12의 예를 다음에 나타냅니다.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime start = ZonedDateTime.of( 2017 , 1 , 17 , 14 , 45 , 0 , 0 , z );
ZonedDateTime stop = ZonedDateTime.of( 2017 , 1 , 17 , 15 , 12 , 0 , 0 , z );
long hours = ChronoUnit.HOURS.between( start.truncatedTo( ChronoUnit.HOURS ) , stop.truncatedTo( ChronoUnit.HOURS ) );
1
며칠 동안 작동하지 않습니다.이 경우 To LocalDate()를 사용합니다.
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
②.
java.time 클래스는 어디서 얻을 수 있습니까?
- 자바 SE 8, 자바 SE 9, 자바 SE 10 이후
- 붙박이.
- 번들 구현이 포함된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되어 있습니다.
- 자바 SE 6 및 자바 SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 쓰리텐ABP 프로젝트가 ThreeTen-Backport(상기)를 채택하고 있습니다.'쓰리텐ABP 사용방법'을 참조하십시오.
쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 등 유용한 클래스가 있습니다.
쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 등 유용한 클래스가 있습니다.
은 두 입니다.LocalDate
많은 데이터를 읽는 경우 상당히 비싼 객체입니다.나는 이것을 사용한다.
public static int getDaysBetween(DateTime earlier, DateTime later)
{
return (int) TimeUnit.MILLISECONDS.toDays(later.getMillis()- earlier.getMillis());
}
「 」를 합니다.getMillis()
기존 변수를 사용합니다.
MILLISECONDS.toDays()
그런 다음 단순한 산술 계산을 사용하여 객체를 생성하지 않습니다.
java.time.Period
클래스를 사용하여 날짜를 세십시오.
은 Java 8을 사용하여 이 더 이기 때문에 8을 사용하여 차이를 계산할 수 있습니다.LocalDate
,LocalDateTime
LocalDate now = LocalDate.now();
LocalDate inputDate = LocalDate.of(2018, 11, 28);
Period period = Period.between( inputDate, now);
int diff = period.getDays();
System.out.println("diff = " + diff);
(KOTLIN) 일정 날짜와 현재 날짜의 차이(Joda)
하시면 됩니다.Days.daysBetween(jodaDate1,jodaDate2)
다음은 예를 제시하겠습니다.
val dateTime: DateTime = DateTime.parse("14/09/2020",
DateTimeFormat.forPattern("dd/MM/yyyy"))
val currentDate = DateTime.now()
//To calculate the days in between
val dayCount = Days.daysBetween(dateTime,currentDate).days
//Set Value to TextView
binding.daysCount.text = dayCount.toString()
DateTime dt = new DateTime(laterDate);
DateTime newDate = dt.minus( new DateTime ( previousDate ).getMillis());
System.out.println("No of days : " + newDate.getDayOfYear() - 1 );
public static int getDifferenceIndays(long timestamp1, long timestamp2) {
final int SECONDS = 60;
final int MINUTES = 60;
final int HOURS = 24;
final int MILLIES = 1000;
long temp;
if (timestamp1 < timestamp2) {
temp = timestamp1;
timestamp1 = timestamp2;
timestamp2 = temp;
}
Calendar startDate = Calendar.getInstance(TimeZone.getDefault());
Calendar endDate = Calendar.getInstance(TimeZone.getDefault());
endDate.setTimeInMillis(timestamp1);
startDate.setTimeInMillis(timestamp2);
if ((timestamp1 - timestamp2) < 1 * HOURS * MINUTES * SECONDS * MILLIES) {
int day1 = endDate.get(Calendar.DAY_OF_MONTH);
int day2 = startDate.get(Calendar.DAY_OF_MONTH);
if (day1 == day2) {
return 0;
} else {
return 1;
}
}
int diffDays = 0;
startDate.add(Calendar.DAY_OF_MONTH, diffDays);
while (startDate.before(endDate)) {
startDate.add(Calendar.DAY_OF_MONTH, 1);
diffDays++;
}
return diffDays;
}
언급URL : https://stackoverflow.com/questions/3802893/number-of-days-between-two-dates-in-joda-time
'programing' 카테고리의 다른 글
최종 객체를 수정할 수 있는 이유는 무엇입니까? (0) | 2022.09.05 |
---|---|
IntelliJ에서 Java 클래스의 메서드를 재정렬하는 간단한 방법? (0) | 2022.09.04 |
org.internate 를 선택합니다.hql.internal.ast 입니다.QuerySyntaxException: 테이블이 매핑되지 않았습니다. (0) | 2022.09.04 |
Java, Simplified는 int 배열에 int가 포함되어 있는지 확인합니다. (0) | 2022.09.04 |
C 함수 선언에서 "..."는 마지막 매개 변수로서 무엇을 합니까? (0) | 2022.09.04 |