예를 들어 날짜가 “2010 년 2 월 23 일”(2010 년 2 월 23 일)입니다. 요일을 반환하는 함수에 전달하고 싶습니다 . 어떻게해야합니까?
이 예에서 함수는 String
“Tue”를 반환해야합니다 .
또한 하루 서 수만 원하는 경우 어떻게 검색 할 수 있습니까?
답변
예. 정확한 경우에 따라 :
-
당신은 사용할 수 있습니다
java.util.Calendar
:Calendar c = Calendar.getInstance(); c.setTime(yourDate); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
-
당신이 출력해야하는 경우
Tue
:보다는 3 단지 문자열 포맷 대신 달력을 통해가는, (일요일 1부터 시작 색인 요일,가 Calendar.SUNDAY 참조)new SimpleDateFormat("EE").format(date)
(EE
“요일, 짧은 버전”을 의미 ) -
입력이 아닌 문자열로 입력 된 경우 구문 분석에
Date
사용해야SimpleDateFormat
합니다.new SimpleDateFormat("dd/M/yyyy").parse(dateString)
-
joda-time ‘s
DateTime
및 전화dateTime.dayOfWeek()
및 / 또는을 사용할 수 있습니다DateTimeFormat
. -
편집 : Java 8부터 joda-time 대신 java.time 패키지를 사용할 수 있습니다.
답변
String input_date="01/08/2012";
SimpleDateFormat format1=new SimpleDateFormat("dd/MM/yyyy");
Date dt1=format1.parse(input_date);
DateFormat format2=new SimpleDateFormat("EEEE");
String finalDay=format2.format(dt1);
이 코드를 사용하여 입력 날짜에서 요일 이름을 찾으십시오. 간단하고 잘 테스트되었습니다.
답변
SimpleDateFormat을 사용하십시오 .
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", java.util.Locale.ENGLISH);
Date myDate = sdf.parse("28/12/2013");
sdf.applyPattern("EEE, d MMM yyyy");
String sMyDate = sdf.format(myDate);
결과 : 2013 년 12 월 28 일 토요일
기본 생성자는 “기본” Locale을 사용하므로 특정 패턴이 필요할 때 조심해서 사용하십시오.
public SimpleDateFormat(String pattern) {
this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}
답변
tl; dr
java.time 사용 …
LocalDate.parse( // Generate `LocalDate` object from String input.
"23/2/2010" ,
DateTimeFormatter.ofPattern( "d/M/uuuu" )
)
.getDayOfWeek() // Get `DayOfWeek` enum object.
.getDisplayName( // Localize. Generate a String to represent this day-of-week.
TextStyle.SHORT_STANDALONE , // How long or abbreviated. Some languages have an alternate spelling for "standalone" use (not so in English).
Locale.US // Or Locale.CANADA_FRENCH and such. Specify a `Locale` to determine (1) human language for translation, and (2) cultural norms for abbreviation, punctuation, etc.
)
화
이 참조 코드는 IdeOne.com 라이브 실행 (하지만 Locale.US
이 작동합니다).
java.time
위의 예제 코드를 참조하고 Przemek 의 올바른 java.time 응답을 참조하십시오 .
서수
요일 서 수가 필요한 경우 어떻게 검색 할 수 있습니까?
서수의 경우 DayOfWeek
와 같이 열거 형 객체를 전달하는 것이 좋습니다 DayOfWeek.TUESDAY
. a DayOfWeek
는 단순한 문자열이나 정수가 아니라 스마트 객체 라는 점을 명심하십시오 . 이러한 열거 형 객체를 사용하면 코드를보다 자체 문서화하고 유효한 값을 보장하며 형식 안전성을 제공 할 수 있습니다.
그러나 당신이 주장한다면 , 번호를 요청하십시오DayOfWeek
. ISO 8601 표준에 따라 월요일-일요일에 1-7을 얻습니다 .
int ordinal = myLocalDate.getDayOfWeek().getValue() ;
조다 타임
업데이트 : Joda-Time 프로젝트는 현재 유지 보수 모드입니다. 팀은 java.time 클래스로 마이그레이션하도록 조언합니다. java.time 체계는 자바 (8)에 내장되어있다 (뿐만 아니라 자바 6 및 7을 다시 포팅 및 상기 안드로이드에 적용 ).
다음은 Bozho 의 승인 된 답변에 언급 된대로 Joda-Time 라이브러리 버전 2.4를 사용하는 예제 코드 입니다. Joda-Time은 Java와 번들로 제공되는 java.util.Date/.Calendar 클래스보다 훨씬 우수합니다.
LocalDate
Joda-Time은 LocalDate
시간 또는 시간대없이 날짜 만 나타내는 클래스를 제공합니다 . 이 질문이 요구하는 것. Java로 번들로 제공되는 이전 java.util.Date/.Calendar 클래스에는이 개념이 없습니다.
파싱
문자열을 날짜 값으로 구문 분석하십시오.
String input = "23/2/2010";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( input );
추출물
날짜 값에서 요일 번호와 이름을 추출하십시오.
int dayOfWeek = localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7.
Locale locale = Locale.US; // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French).
DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "E" ).withLocale( locale );
String output = formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc.
String outputQuébécois = formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );
덤프
콘솔로 덤프하십시오.
System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate ); // Defaults to ISO 8601 formatted strings.
System.out.println( "dayOfWeek: " + dayOfWeek );
System.out.println( "output: " + output );
System.out.println( "outputQuébécois: " + outputQuébécois );
운영
실행할 때.
input: 23/2/2010
localDate: 2010-02-23
dayOfWeek: 2
output: Tue
outputQuébécois: mar.
java.time에 대하여
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
java.time 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- ThreeTenABP의 프로젝트는 적응 ThreeTen – 백 포트 특히 안드로이드에 대한 (위에서 언급).
- ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
java.time
java.time
Java 8 이상에 내장 된 프레임 워크 사용
열거는 자동으로 인간의 언어와 문화 규범에 국한 하루의 이름의 캐릭터를 생성 할 수 있습니다 . 긴 형식이나 약어 이름을 원한다는 것을 나타내려면 a 를 지정하십시오 .DayOfWeek
Locale
TextStyle
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.TextStyle
import java.util.Locale
import java.time.DayOfWeek;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy");
LocalDate date = LocalDate.parse("23/2/2010", formatter); // LocalDate = 2010-02-23
DayOfWeek dow = date.getDayOfWeek(); // Extracts a `DayOfWeek` enum object.
String output = dow.getDisplayName(TextStyle.SHORT, Locale.US); // String = Tue
답변
다음 코드를 시도 할 수 있습니다.
import java.time.*;
public class Test{
public static void main(String[] args) {
DayOfWeek dow = LocalDate.of(2010,Month.FEBRUARY,23).getDayOfWeek();
String s = String.valueOf(dow);
System.out.println(String.format("%.3s",s));
}
}
답변
public class TryDateFormats {
public static void main(String[] args) throws ParseException {
String month = "08";
String day = "05";
String year = "2015";
String inputDateStr = String.format("%s/%s/%s", day, month, year);
Date inputDate = new SimpleDateFormat("dd/MM/yyyy").parse(inputDateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(inputDate);
String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();
System.out.println(dayOfWeek);
}
}