[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.Date
과 java.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 클래스는 어디서 구할 수 있습니까?
- Java SE 8 및 SE 9 이상
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 SE 7
- java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및 7로 백 포트됩니다 .
- 기계적 인조 인간
- ThreeTenABP의 프로젝트는 적응 ThreeTen – 백 포트 특히 안드로이드에 대한 (위에서 언급).
- 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
SimpleDateFormat의 패턴에 오류가 있습니다. 그것은해야한다
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");