자바 : getMinutes 및 getHours


142

이후 어떻게 시간과 분을받을 수 있나요 Date.getHoursDate.getMinutes사용되지있어? Google 검색에서 찾은 예제는 더 이상 사용되지 않는 방법을 사용했습니다.


2
참고로, 같은 몹시 귀찮은 날짜 - 시간 수업 java.util.Date, java.util.Calendar그리고 java.text.SimpleDateFormat지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque

답변:


171

표준 java.util.Date 클래스 대신 Joda Time을 사용하십시오 . Joda Time 라이브러리에는 날짜 처리를위한 API가 훨씬 우수합니다.

DateTime dt = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day

Joda Time 라이브러리 사용의 장단점에 대해서는이 질문 을 참조하십시오 .

Joda Time은 표준 구성 요소로 일부 Java 버전에 포함될 수도 있습니다 ( JSR-310 참조) .


전통적인 java.util.Date 및 java.util.Calendar 클래스를 사용해야하는 경우 해당 JavaDoc의 도움말 ( java.util.Calendarjava.util.Date ) 을 참조하십시오 .

이와 같은 전통적인 클래스를 사용하여 지정된 Date 인스턴스에서 필드를 가져올 수 있습니다.

Date date = new Date();   // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date);   // assigns calendar to given date 
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR);        // gets hour in 12h format
calendar.get(Calendar.MONTH);       // gets month number, NOTE this is zero based!

2
질문 : Java 8이 LocalDateTime과 함께 출시되었으므로 LocalDateTime보다 Joda Time을 사용해야하는 이유가 있습니까?
chrips

@Chrips 의견이 다릅니다. Joda-Time은 공식적으로 java.time 사용을 권장합니다.
Ole VV

96

Date.getHours에 대한 Javadoc에서

As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

그래서 사용

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);

getMinutes에 해당합니다.


6
그렇다면 ... 현재와 일치하지 않는 Date에서 시간을 얻으려면 어떻게 작동합니까?
Michael


이 끔찍한 클래스는 JSR 310을 채택 하여 현대 java.time 클래스로 몇 년 전에 대체 ZonedDateTime되었습니다. 대신 사용하십시오 .
Basil Bourque

58

java.time

난의 팬이 있지만 Joda 타임 , 자바 (8) 소개 java.time의 마지막 가치 자바 표준 솔루션 패키지를! 시간과 분이 아닌 java.time에 대한 자세한 정보는 Java SE 8 Date and Time 기사를 읽으십시오 .

특히 LocalDateTime수업을보십시오.

시간과 분 :

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();

4
이것이 가장 좋은 대답입니다. 독자와 사용자에게 시간대에 민감한 작업임을 상기시키기 위해 명시적인 시간대를 제공 할 수 있습니다 LocalDateTime.now(ZoneId.of("Asia/Manilla")). now()일관성을 위해 한 번만 읽으십시오 (두 통화간에 시간이 경과 함). 날짜가 실제로 관련이 없다면 LocalTime작동합니다.
Ole VV

1
감사합니다. 나는 어떻게 든이 멋진 내장 수업을 오랫동안 놓쳤습니다!
chrips

Ole VV의 코멘트가 정확합니다. 그러나 더 나은 방법은 ZonedDateTime클래스보다는 클래스를 사용 하는 것 LocalDateTime입니다. 으로 LocalDateTime당신은 아무것도, 아무 이유없이 귀중한 시간대 정보를 폐기된다되었습니다.
Basil Bourque

이전 버전과 호환 될 필요가없는 경우에 유용합니다. 안타깝게도 Android 용으로 작성하고 이전 API 버전을 지원하거나 Java 8을 항상 사용할 수없는 다른 경우에는 적합하지 않습니다.
M_M

@M_M Java 6 & 7의 경우 대부분의 java.time 기능이 ThreeTen-Backport 라이브러리 에 백 포트됩니다 . ThreeTenABP의 초기 Android에 더 적합합니다 . 링크는 내 답변 의 마지막 섹션을 참조하십시오 .
바질 부르 케

36

먼저 java.util.Calendar를 가져 오십시오.

Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));

12

tl; dr

ZonedDateTime.now().getHour()

… 또는…

LocalTime.now().getHour() 

ZonedDateTime

JD답변 은 훌륭하지만 최적은 아닙니다. 그 답변은 LocalDateTime클래스를 사용합니다 . 시간대 또는 UTC에서 오프셋 개념이 없기 때문에 해당 클래스는 순간을 나타낼 수 없습니다.

사용하는 것이 좋습니다 ZonedDateTime.

ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

시간대 지정

ZoneId인수 를 생략하면 런타임시 JVM의 현재 기본 시간대를 사용하여 내재적으로 적용됩니다.

그래서 이거:

ZonedDateTime.now()

… 이와 동일합니다 :

ZonedDateTime.now( ZoneId.systemDefault() )

원하는 / 예상 시간대를 전달하여 명시 적으로 작성하는 것이 좋습니다. 기본값은 런타임 중에 언제든지 변경할있습니다 .

중요한 경우 사용자와 시간대를 확인하십시오.

시분

심문 ZonedDateTime시간과 분을 위해.

int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;

LocalTime

시간대가없는 시간대 만 원하면을 추출하십시오 LocalTime.

LocalTime lt = zdt.toLocalTime() ;

또는 ZonedDateTime으로 직접 이동하여 완전히 건너 뜁니다 LocalTime.

LocalTime lt = LocalTime.now( z ) ;  // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).

java.time 타입

최신 java.time 대 레거시의 날짜-시간 클래스 유형 표


java.time에 대하여

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

자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*

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

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



3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

이 함수는 int 값을 시간과 분으로 반환합니다.


1
복제. 이 접근법은 Answer by JD 에서 이미 다루었습니다 .
Basil Bourque

그렇 java.sql.Time습니까? 확실히 구식 클래스를 게임에 도입 할 이유가 전혀 없습니다 java.time.LocalTime. 당신은 너무 복잡하다.
Ole VV

외모처럼 getMinutes()(I 자바 1.8을 사용하고 있습니다)에서 사용되지 않으며 대체되었습니다Calendar.get(Calendar.MINUTE)
Saltz3

3

분과 시간을 얻는 또 다른 방법은 SimpleDateFormat을 사용하는 것입니다.

SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())

참고로, 같은 몹시 귀찮은 날짜 - 시간 수업 java.util.Date, java.util.Calendar그리고 java.text.SimpleDateFormat지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque

2

광고 요다 시간을 보는 것이 좋습니다. http://www.joda.org/joda-time/

두꺼운 프로젝트에 다른 라이브러리를 추가하는 것이 두려웠지만 쉽고 빠르며 똑똑하고 훌륭합니다. 또한 기존 코드와 어느 정도 잘 어울립니다.


1

권장하지는 않지만 java.util.Date의 많은 메소드가 더 이상 사용되지 않지만 여전히 작동한다는 점을 지적 할 가치가 있다고 생각합니다. 사소한 상황에서는 사용하는 것이 좋습니다. 또한 java.util.Calendar는 상당히 느리므로 getMonth 및 getYear on Date가 더 빠를 수 있습니다.


1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

이것은 나를 위해 작동


0

import java.util.*달력 및 포맷터 클래스를 사용하여 시간 및 분을 얻을 수 있습니다. Calendar cal = Calendar.getInstance()그리고 Formatter fmt=new Formatter()시간 및 분 표시 형식을 설정 fmt.format("%tl:%M",cal,cal)하고 인쇄 System.out.println(fmt) 출력은 다음과 같습니다.10:12

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.