Date 객체에 n 시간을 어떻게 추가합니까? StackOverflow에서 일을 사용하는 또 다른 예를 찾았지만 여전히 몇 시간이 걸리는 방법을 이해하지 못합니다.
답변
캘린더 클래스를 확인하십시오. 그것은이 add
시간 조작을 허용하는 방법 (일부 다른 사람을). 이와 같은 것이 작동해야합니다.
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date()); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
cal.getTime(); // returns new date object, one hour in the future
자세한 내용은 API 를 확인하십시오 .
답변
Apache Commons / Lang 을 사용하는 경우 다음을 사용 하여 한 번에 수행 할 수 있습니다 DateUtils.addHours()
.
Date newDate = DateUtils.addHours(oldDate, 3);
(원래 개체는 변경되지 않습니다)
답변
@Christopher의 예를 단순화합니다.
상수가 있다고 가정
public static final long HOUR = 3600*1000; // in milli-seconds.
당신은 쓸 수 있습니다.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Date 객체 대신 long 을 사용 하여 날짜 / 시간을 저장하면
long newDate = oldDate + 2 * HOUR;
답변
tl; dr
myJavaUtilDate.toInstant()
.plusHours( 8 )
또는…
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our `Instant`.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.
java.time 사용
Java 8 이상에 내장 된 java.time 프레임 워크는 이전 Java.util.Date/.Calendar 클래스를 대체합니다. 그 오래된 수업은 악명 높았습니다. 피하십시오.
toInstant
java.util.Date에 새로 추가 된 메소드를 사용하여 이전 유형에서 새 java.time 유형으로 변환하십시오. 은 Instant
의 타임 라인에 순간 UTC 의 해상도를 가진 나노초 .
Instant instant = myUtilDate.toInstant();
등을 Instant
전달하여 시간을 추가 할 수 있습니다 .TemporalAmount
Duration
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
해당 날짜-시간을 읽으려면을 호출하여 표준 ISO 8601 형식의 문자열을 생성하십시오 toString
.
String output = instantHourLater.toString();
일부 지역의 벽시계 시간 렌즈를 통해 그 순간을보고 싶을 수도 있습니다 . Instant
을 만들어 원하는 / 예상 시간대를 조정하십시오 ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
또는 전화 plusHours
로 시간 수를 추가 할 수 있습니다. 존이된다는 것은 일광 절약 시간제 (DST)를 의미하며 기타 예외는 귀하를 대신하여 처리됩니다.
ZonedDateTime later = zdt.plusHours( 8 );
당신은을 포함하여 이전 날짜 – 시간 클래스를 사용하지 말아야 java.util.Date
하고 .Calendar
. 그러나 java.util.Date
java.time 유형에 대해 아직 업데이트되지 않은 클래스와의 상호 운용성 이 정말로 필요한 경우 ZonedDateTime
via 에서 변환하십시오 Instant
. 이전 클래스에 추가 된 새로운 메소드는 java.time 유형과의 변환을 용이하게합니다.
java.util.Date date = java.util.Date.from( later.toInstant() );
변환에 대한 자세한 설명은 참조 내 대답 , 질문에를 무엇 “java.time”유형에 java.util.Date를 변환? .
java.time에 대하여
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스의 최신 버전의 Android 번들 구현.
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트 는 위에서 언급 한 ThreeTen-Backport를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
Joda-Time 과 함께
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
답변
답변
새로운 java.util.concurrent.TimeUnit 클래스를 사용하면 다음 과 같이 할 수 있습니다
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours