[java] 내 데이트에 회의록을 추가하는 방법

이 날짜 개체가 있습니다.

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());

d1의 값은 Fri Jan 07 17:40:00 PKT 2011

이제 위의 날짜에 10 분을 추가하려고합니다.

Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());

에 대한 newTime변경 값 2011-50-07 17:50
이지만이어야합니다 07-01-2011 17:50.

분을 올바르게 추가하지만 월도 변경됩니다. 이유를 모르겠습니다!



답변

당신의 문제는 당신이 사용하고 있다는 것 mm입니다. 당신은 사용해야합니다 MM. MM월 및 mm분입니다. 시도yyyy-MM-dd HH:mm

기타 접근 방식 :

이것만큼 간단 할 수 있습니다 (다른 옵션은 joda-time 을 사용하는 것입니다 )

static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs

Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));


답변

org.apache.commons.lang3.time 패키지에서 DateUtils 클래스를 사용할 수 있습니다.

int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute


답변

@Pangea의 답변을 구현하는 편리한 방법 :

/*
*  Convenience method to add a specified number of minutes to a Date object
*  From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
*  @param  minutes  The number of minutes to add
*  @param  beforeTime  The time that will have minutes added to it
*  @return  A date object with the specified number of minutes added to it
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
    final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs

    long curTimeInMs = beforeTime.getTime();
    Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
    return afterAddingMins;
}


답변

종속성을 피하기 위해 다음과 같이 java.util.Calendar를 사용할 수 있습니다.

    Calendar now = Calendar.getInstance();
    now.add(Calendar.MINUTE, 10);
    Date teenMinutesFromNow = now.getTime();

Java 8에는 새로운 API가 있습니다.

    LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
    Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());


답변

이것은 잘못 지정되었습니다.

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");

월 (MM) 대신 분을 사용하고 있습니다.


답변

tl; dr

LocalDateTime.parse(
    "2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )

java.time

날짜-시간 작업을 위해 우수한 java.time 클래스를 사용하십시오. 이 클래스는 다음과 같은 번거로운 된 날짜 – 시간의 수업을 대신하는 java.util.Datejava.util.Calendar.

ISO 8601

java.time 클래스 는 날짜-시간 값의 문자열을 구문 분석 / 생성하기 위해 기본적으로 표준 ISO 8601 형식을 사용 합니다. 입력 문자열을 준수하려면 가운데의 SPACE를 T.

String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );

LocalDateTime

LocalDateTime시간대 또는 UTC로부터의 오프셋에 대한 정보가 없기 때문에 입력 문자열을 파싱합니다 .

LocalDateTime ldt = LocalDateTime.parse( inputModified );

10 분을 추가합니다.

LocalDateTime ldtLater = ldt.plusMinutes( 10 );

ldt.toString () : 2016-01-23T12 : 34

ldtLater.toString () : 2016-01-23T12 : 44

IdeOne.com에서 라이브 코드를 참조하십시오 .

LocalDateTime그것은 않도록, 시간 영역이없는 하지 타임 라인에 포인트를 나타냅니다. 실제 순간으로 번역 할 시간대를 적용합니다. 지정 적절한 시간대 이름 의 형식 continent/region예컨대, America/Montreal, Africa/Casablanca, 또는 Pacific/Auckland, 나 Asia/Karachi. 3-4 문자 약어를 사용하지 마십시오 같은 EST하거나 IST또는 PKT그들이 있습니다로 하지 진정한 시간대가 아닌 표준화, 심지어 고유하지 않은 (!).

ZonedDateTime

이 값의 의도 된 시간대를 알고있는 경우를 적용 ZoneId하여 ZonedDateTime.

ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );

zdt.toString () : 2016-01-23T12 : 44 + 05 : 00 [아시아 / 카라치]

이상

시간대를 추가하기 전이나 후에 10 분을 추가할지 생각해보십시오. 벽시계 시간 을 변경하는 일광 절약 시간 (DST)과 같은 이상으로 인해 매우 다른 결과를 얻을 수 있습니다 .

영역을 추가하기 전 또는 후에 10 분을 추가해야하는지 여부는 비즈니스 시나리오 및 규칙의 의미에 따라 다릅니다.

도움말 : 타임 라인에서 특정 순간을 계획 할 때는 항상 시간대 정보를 유지하세요 . 입력 데이터와 마찬가지로 해당 정보를 잃지 마십시오. 값 12:34이 파키스탄의 정오 또는 프랑스의 정오 또는 퀘벡의 정오를 의미합니까? 파키스탄에서 정오를 의미했다면 최소한 UTC 오프셋 ( +05:00)과 시간대 이름 ( ) 을 포함하여 그렇게 말 하십시오 Asia/Karachi.

Instant

의 렌즈를 통해 본 같은 순간을하려면 UTC , 압축을 풉니 다 Instant. 이 Instant클래스는 나노초 (소수점의 최대 9 자리) 의 해상도로 타임 라인의 한 순간을 UTC 로 나타냅니다 .

Instant instant = zdt.toInstant();

변하게 하다

가능한 한 번거로운 이전 날짜-시간 수업을 피하십시오. 하지만 필요한 경우 변환 할 수 있습니다. 이전 클래스에 추가 된 새 메서드를 호출합니다.

java.util.Date utilDate = java.util.Date.from( instant );

java.time 정보

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 현재의 유지 관리 모드 , java.time로 마이그레이션을 조언한다.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


답변

SimpleDateFormat의 패턴에 오류가 있습니다. 그것은해야한다

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");