2010-03-11 6 views
4

현재 자바 일정 응용 프로그램을 만들고 캘린더 클래스를 사용하여 요일을 찾는 방법을 궁금합니다. . 여기 Java : 현재 요일 값 가져 오기

일주일 일정

public static String getSunday() { 
    SimpleDateFormat d = new SimpleDateFormat(dayDate); 
    Calendar specific = cal; 
    specific.add(Calendar.DAY_OF_YEAR, (cal.getFirstDayOfWeek() - ??)); 
    return d.format(specific.getTime()); 
} 
을 설정하기 위해 내가 수업 시간에 사용하고하는 방법입니다
+1

여기서 무엇을하려하는지 완전히 명확하지 않습니다. 귀하의 방법은 일요일에 시작됩니다. 달력의 형식화 된 날짜 문자열을 반환합니다.이 문자열에는 지정되지 않은 시작 날짜가 포함되어 있습니다.이 날짜는 해당주의 첫 번째 날에서 무언가를 빼서 계산 한 일 수만큼 앞으로 이동합니다. 시작일은 무엇입니까? 너는 무엇을 돌려 주려고 하는가? –

+0

cal은 인스턴스를 가져 오는 Calendar 클래스 아래에 만들어집니다. 그것은 생성자 아래에서 초기화되었고 내가 시도한 것은 적절한 날짜 인 "thurs"아래에 일 날짜 "3/11"을 정렬하는 것이 었습니다. – TLM

답변

6

당신과 get()를 호출하여 현재 요일을 얻을 수 있습니다 Calendar.DAY_OF_WEEK

public int getTodaysDayOfWeek() { 
    final Calendar c = Calendar.getInstance(); 
    return c.get(Calendar.DAY_OF_WEEK); 
} 

또한, 내가 뭘 하려는지 정확히 모르겠지만, 나에게는 물고기 같아 보인다. (예를 들어 cal 무엇입니까?)

+0

이제 구식입니다. ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)와 같은 번거로운 오래된 날짜 - 시간 클래스, ['java. util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html) 및 java.text.SimpleTextFormat이 이제는 [레거시] (https :// /en.wikipedia.org/wiki/Legacy_system), [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) 클래스로 대체되었습니다. . [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html)을 참조하십시오. –

+0

@BasilBourque 잘 대답은 2010 년입니다 :) – Pointy

1

TL; DR

DayOfWeek.from(LocalDate.now()) 

일주일 일정

을 설정하여 현재 요일을 찾는 방법

LocalDate sunday = 
    LocalDate.now() 
      .with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)) ; 

LocalDate monday = sunday.plusDays(1) ; 
LocalDate tuesday = monday.plusDays(1) ; 
… 

세부 사항

질문 및 기타 답변 모두 구식 클래스를 사용합니다.

오래된 날짜/시간 클래스는 잘못 설계되었거나 혼란스럽고 번거로운 클래스입니다. 그들을 피하십시오.

java.time

자바 8에서

이후, 우리가 사용하는 내장 java.time 프레임 워크. 많은 기능이 Java 6 & 7 (ThreeTen-Backport)으로 다시 포팅되고, Android (ThreeTenABP)에 추가로 적용됩니다.

Instant은 최대 나노초까지의 현재 시간을 UTC로 나타냅니다.

Instant instant = Instant.now(); 

날짜를 결정하려면 요일을 결정해야합니다. 시간대는 날짜를 결정할 때 중요합니다. 날짜는 특정 순간에 지구 곳곳에 따라 다를 수 있기 때문입니다. 예를 들어, 파리에서 자정 이후 몇 분 후에 새로운 날이 오는 반면 몬트리올에서는 여전히 "어제"입니다.

ZoneId을 사용하여 시간대를 나타냅니다. continent/region 형식의 proper time zone name을 요청하십시오. 주류 미디어에서 흔히 볼 수있는 3-4 자 약어는 절대로 표준 시간대가 아니며 고유하지 않으므로 사용하지 마십시오 (!).

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 

간편한 DayOfWeek enum을 사용하여 요일을 결정하십시오.

DayOfWeek dow = DayOfWeek.from(zdt); 

DayOfWeek 개체를 조사 할 수 있습니다.

ask for a number 1부터 7까지 일요일은 1 일이고, 일요일은 ISO 8601 표준입니다.그러나 코드 주위에이 숫자를 전달하지 마십시오. 대신 DayOfWeek 객체를 전달하여 유형 안전성과 유효한 유효 값의 이점을 누립니다.

int dowNumber = dow.getValue(); 

요일 이름은 텍스트 일 ​​수 있습니다. java.time이 이름을 자동으로 인간 언어로 변환하도록합니다. A Locale 종족은 인간의 언어이며, 약어 및 대문자 사용법과 같은 문화적 규범을 지정합니다. TextStyle 열거 형은 원하는 이름의 길이를 나타냅니다.

Locale locale = Locale.CANADA_FRENCH; 
String output = dow.getDisplayName(TextStyle.FULL , locale); 

은 일주일의 시작을 얻기 이전의 월요일 (일요일, 무엇이든)을 요청하거나이 월요일 인 경우 오늘을 고수합니다. TemporalAdjusters 클래스에있는 TemporalAdjuster 구현을 사용하십시오.

LocalDate startOfWeek = zdt.toLocalDate().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); 

당신이 날짜 전용이 아닌 날짜와 시간을 필요로하는 경우, 일 (항상 시간 00:00:00)의 첫 순간을 얻을 수 java.time를 부탁드립니다. java.time

소개

ZonedDateTime zdtWeekStart = startOfWeek.atStartOfDay(zoneId); 

java.time 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 java.util.Date, Calendar, & SimpleDateFormat과 같이 문제가있는 이전 legacy 날짜 - 시간 클래스를 대체합니다.

maintenance mode에있는 Joda-Time 프로젝트는 java.time 클래스로의 마이그레이션을 권장합니다.

자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.

어디에서 java.time 클래스를 얻을 수 있습니까?

ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval, YearWeek, YearQuartermore과 같은 유용한 클래스가 있습니다.