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


110

이 날짜 개체가 있습니다.

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.

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



답변:


193

당신의 문제는 당신이 사용하고 있다는 것 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));

감사합니다, 나는 이것을 시도했습니다, 날짜가 올바르게오고 있지만 문자열로 변경하려고 할 때 동일한 잘못된 결과를 제공합니다 .String newTime = df.format (afterAddingTenMins); 그것은 나에게 2011-50-07 17시 50분를 제공, 나는 문자열로 변환해야, 어떤 제안
junaidp

1
@junaidp 후자의 코드를 사용했지만 솔루션의 전자 부분을 무시 했습니까?
Carl

57

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

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

1
이전 버전의 DateUtils를 다루는 사람들을 위해 패키지에있는 패키지->org.apache.commons.lang.time.DateUtils
realPK

32

@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;
}

25

종속성을 피하기 위해 다음과 같이 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());

17

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

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

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


6

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, 그리고 .


4

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

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

4

이 형식을 사용하십시오.

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

분은 mm, mounth는 MM


2

날짜를 분석 한 후에는이 유틸리티 함수를 사용하여 시간, 분 또는 초를 추가합니다.

public class DateTimeUtils {
    private static final long ONE_HOUR_IN_MS = 3600000;
    private static final long ONE_MIN_IN_MS = 60000;
    private static final long ONE_SEC_IN_MS = 1000;

    public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
        long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
        long minsToAddInMs = mins * ONE_MIN_IN_MS;
        long secsToAddInMs = secs * ONE_SEC_IN_MS;
        return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
    }
}

긴 시간을 추가 할 때는주의해야합니다. 1 일이 항상 24 시간은 아니므로 (일광 절약형 조정, 윤초 등 Calendar) 권장됩니다.


1

나를 위해 일하십시오 DateUtils

//import
import org.apache.commons.lang.time.DateUtils

...

        //Added and removed minutes to increase current range dates
        Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
        Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)

2
이 답변 은 alireza alallah가 게시 한 작년 의 답변보다 어떻게 개선 됩니까 ? 또한 질문은 초가 아닌 분을 참조했습니다.
Basil Bourque

1

상수없이 수행 가능 (예 : 3600000 ms는 1h)

public static Date addMinutesToDate(Date date, int minutes) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }

public static Date addHoursToDate(Date date, int hours) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.HOUR_OF_DAY, hours);
    return calendar.getTime();
}

사용 예 :

System.out.println(new Date());
System.out.println(addMinutesToDate(new Date(), 5));

Tue May 26 16:16:14 CEST 2020
Tue May 26 16:21:14 CEST 2020

1
이러한 끔찍한 날짜-시간 클래스는 JSR 310 채택 시점 에서 수년 전 현대 java.time 클래스로 대체되었습니다.
Basil Bourque

-2

관심있는 사람이라면 누구나. 비슷한 기능이 필요한 iOS 프로젝트에서 작업 중이 어서 @jeznag의 답변을 신속하게 이식했습니다.

private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate {
    var SIXTY_SECONDS = 60

    var m = (Double) (minutes * SIXTY_SECONDS)
    var c =  beforeDate.timeIntervalSince1970  + m
    var newDate = NSDate(timeIntervalSince1970: c)

    return newDate
}

Swift의 날짜에는 이미 유사한 내장 함수가 있습니다. 예를 들어 Date (timeInterval :, since
Albert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.