Date 객체에 n 시간을 어떻게 추가합니까? StackOverflow에서 일을 사용하는 또 다른 예를 찾았지만 여전히 몇 시간이 걸리는 방법을 이해하지 못합니다.
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 를 확인하십시오 .
Calendar.add()
는 자동으로 처리합니다.
java.util.Date
, java.util.Calendar
그리고 java.text.SimpleDateFormat
지금 기존 에 의해 대체, java.time의 자바 8 자바 9 페이지에 내장 된 클래스 튜토리얼 오라클 .
Apache Commons / Lang 을 사용하는 경우 다음을 사용 하여 한 번에 수행 할 수 있습니다 DateUtils.addHours()
.
Date newDate = DateUtils.addHours(oldDate, 3);
(원래 개체는 변경되지 않습니다)
DateUtils.addHours(oldDate, -1);
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 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의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
Joda-Time 과 함께
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTime
대신에 가야 합니다 LocalDateTime
. "로컬"수단이 없는 특정 지역에 연결하고 있지 타임 라인에 묶여. "2015 년 12 월 25 일 자정에 크리스마스가 시작됩니다"와 같이, 시간대에 따라 다른 순간이므로 특정 시간대를 적용하여 타임 라인에서 특정 순간을 얻을 때까지 아무런 의미가 없습니다. 또한 표준 시간대가없는 일광 절약 시간 (DST) 및 기타 예외는 LocalDateTime을 사용하여 처리되지 않습니다. 비교하여 내 답변 을 참조하십시오 .
java.util.Date
요청이 우리에게 물어 봤다으로 개체를 ZonedDateTime.toInstant()
하고 Date.from()
같은 여기에 설명 stackoverflow.com/a/32274725/5661065
새로운 java.util.concurrent.TimeUnit 클래스를 사용하면 다음 과 같이 할 수 있습니다
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
다음과 같은 것 :
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
java.util.Date
, java.util.Calendar
그리고 java.text.SimpleDateFormat
지금 기존 에 의해 대체, java.time의 자바 8 자바 9 페이지에 내장 된 클래스 튜토리얼 오라클 .
이것은 Date
객체가 Datetime 형식 일 때 또 다른 코드 입니다. 이 코드의 장점은 더 많은 시간을 주면 날짜도 그에 따라 업데이트됩니다.
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
catch (ParseException e)
{
e.printStackTrace();
}
System.out.println("This is the Actual Date:"+myDateTime);
Calendar cal = new GregorianCalendar();
cal.setTime(myDateTime);
//Adding 21 Hours to your Date
cal.add(Calendar.HOUR_OF_DAY, 21);
System.out.println("This is Hours Added Date:"+cal.getTime());
출력은 다음과 같습니다.
This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
을 사용하려는 경우 java.time
ISO 8601 형식의 지속 시간을 추가하는 방법은 다음과 같습니다.
import java.time.Duration;
import java.time.LocalDateTime;
...
LocalDateTime yourDate = ...
...
// Adds 1 hour to your date.
yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.
Duration.parse(iso8601duration)
감사합니다.하지만 연산자 +
를 사용할 수 없습니다 LocalDateTime
. 편집하고 싶을 수도 있습니다. 그러나 .plus(...)
작동합니다.
Date
UTC에 대한 특정 순간을 나타내는 객체 에 관한 것 입니다. 귀하의 사용이 LocalDateTime
질문을 해결하지 못합니다. LocalDateTime
시간대 또는 UTC에서 오프셋 개념이 없으므로 순간을 나타낼 수 없습니다. 이 문제에 대한 잘못된 수업. Instant와 LocalDateTime의 차이점
Date
객체는 더 이상 사용되지 않습니다. 시간대에 관해서는 질문이 모호하므로 내 대답이 유효합니다. 또한, 당신은 그냥 교환 할 수 있습니다 LocalDateTime
에 대한 ZonedDateTime
.
Joda DateTime API로 할 수 있습니다
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Java 8 클래스를 사용합니다. 아래와 같이 날짜와 시간을 매우 쉽게 조작 할 수 있습니다.
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Date
UTC에 대한 특정 순간을 나타내는 객체 에 관한 것 입니다. 귀하의 사용이 LocalDateTime
질문을 해결하지 못합니다. LocalDateTime
시간대 또는 UTC에서 오프셋 개념이 없으므로 순간을 나타낼 수 없습니다. 이 문제에 대한 잘못된 수업. Instant와 LocalDateTime의 차이점
Java 8에서 LocalDateTime 클래스를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Date
UTC에 대한 특정 순간을 나타내는 객체 에 관한 것 입니다. 귀하의 사용이 LocalDateTime
질문을 해결하지 못합니다. LocalDateTime
시간대 또는 UTC에서 오프셋 개념이 없으므로 순간을 나타낼 수 없습니다. 이 문제에 대한 잘못된 수업. Instant와 LocalDateTime의 차이점
이 방법을 사용할 수 있습니다. 이해하고 구현하기 쉽습니다.
public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
calendar.add(Calendar.MINUTE, nombreMinute);
calendar.add(Calendar.SECOND, nombreSeconde);
return calendar.getTime();
}