Android : 사용자의 언어로 현재 요일 (월요일 등)을 가져 오는 방법은 무엇입니까?


80

사용자의 현지 언어로 현재 요일 (월요일, 화요일 ...)이 무엇인지 알고 싶습니다. 예 : 사용자가 프랑스어 인 경우 "Lundi" "Mardi"등.

이 게시물을 읽었지만 사용자 언어로 된 날짜가 아닌 문자열이 아닌 int 만 반환합니다. Android에서 현재 요일을 얻는 가장 쉬운 방법은 무엇입니까?

더 일반적으로, 사용자의 언어로 작성된 모든 요일과 모든 달을 어떻게 얻을 수 있습니까?

예를 들어 Google 의제가 사용자의 현지 언어로 작성된 날짜와 월을 제공하므로 이것이 가능하다고 생각합니다.

감사 !!

답변:


168

SimpleDateFormat 을 사용 하여 사용자 로캘과 관련하여 날짜와 시간을 사람이 읽을 수있는 문자열로 형식화합니다.

현재 요일을 가져 오는 작은 예 (예 : "월요일") :

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

31

이 시도:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];

안녕하세요, shortweekdays를 사용하는 경우 한 글자 만 표시됩니다.하지만 하루 중 처음 3 개의 글자를 표시해야합니다
sankar muniyappa

사용 가능한 모든 로케일에 액세스하려면 사용해야합니다 DateFormatSymbols.getInstance()(현재는 동일한 결과를 제공 할 수 있음).
user905686

20

난 이미 대답을 알고 있지만, 사람을 찾고 '금' 과 같이

금-

SimpleDateFormat sdf = new SimpleDateFormat("EEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

전체 날짜 문자열을 원하는 사람은 금요일에 4E 를 사용할 수 있습니다.

금요일

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

즐겨...


생성자 날짜가 정의되지 않았다는 두 번째 줄에 오류가 발생합니다.

17

짧게 만들려면 다음을 사용할 수 있습니다.

android.text.format.DateFormat.format("EEEE", date);

요일을 문자열로 반환합니다.


11

그녀는 내가 요일 이름을 얻는 데 사용한 것입니다 ( 0-6의미 monday - sunday).

public static String getFullDayName(int day) {
    Calendar c = Calendar.getInstance();
    // date doesn't matter - it has to be a Monday
    // I new that first August 2011 is one ;-)
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%tA", c);
}

public static String getShortDayName(int day) {
    Calendar c = Calendar.getInstance();
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%ta", c);
}

6

tl; dr

String output = 
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .getDayOfWeek()
             .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

java.time

Java 8 이상에 빌드되고 Java 6 및 7Android백 포팅 된 java.time 클래스 에는 편리한 DayOfWeek열거 형이 포함되어 있습니다.

요일은 표준 ISO 8601 정의에 따라 번호가 지정되며 월요일-일요일은 1-7입니다.

DayOfWeek dow = DayOfWeek.of( 1 );

이 열거 형에는 getDisplayName현지화 된 오늘의 번역 된 이름의 문자열을 생성하는 메서드가 포함되어 있습니다.

Locale객체는 번역에 사용되는 인간의 언어를 지정하고, 지정 문화적 규범은 대문자와 문장 부호 등의 문제를 결정합니다.

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

오늘 날짜를 확인하려면 LocalDate수업을 사용하세요 . 날짜가 전 세계에 따라 다르기 때문에 시간대는 매우 중요합니다.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DayOfWeek dow = today.getDayOfWeek();
String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

로케일은 시간대와 관련이 없습니다. 두 가지 별개의 직교 문제가 있습니다. 인도 ( Asia/Kolkata) 에있는 날짜-시간의 프랑스어 프레젠테이션을 원할 수 있습니다 .

Joda-Time

업데이트 : 현재 유지 보수 모드Joda-Time 프로젝트 는 java.time 클래스 로의 마이그레이션을 권장 합니다.

Joda 타임 라이브러리를 제공합니다 Locale날짜 - 시간 값의 구동 형 현지화.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatterUnJourQuébécois = DateTimeFormat.forPattern( "EEEE" ).withLocale( locale );

String output = formatterUnJourQuébécois.print( now );

System.out.println("output: " + output );

출력 : samedi


java.time 정보

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

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

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

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


5

이 시도...

//global declaration
private TextView timeUpdate;
Calendar calendar;

.......

timeUpdate = (TextView) findViewById(R.id.timeUpdate); //initialize in onCreate()

.......

//in onStart()
calendar = Calendar.getInstance();
//date format is:  "Date-Month-Year Hour:Minutes am/pm"
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm a"); //Date and time
String currentDate = sdf.format(calendar.getTime());

//Day of Name in full form like,"Saturday", or if you need the first three characters you have to put "EEE" in the date format and your result will be "Sat".
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE"); 
Date date = new Date();
String dayName = sdf_.format(date);
timeUpdate.setText("" + dayName + " " + currentDate + "");

결과는 ... 여기에 이미지 설명 입력

행복한 코딩 .....


4

늦게 답장을 드려 죄송하지만 제대로 작동합니다.

daytext=(textview)findviewById(R.id.day);

Calender c=Calender.getInstance();
SimpleDateFormat sd=new SimpleDateFormat("EEEE");
String dayofweek=sd.format(c.getTime());


daytext.setText(dayofweek);

2
(1)이 솔루션은 이미 승인 된 답변 에서 다룹니다 . 당신의 것이 더 많은 가치를 추가하거나 삭제하는 방법을 설명하십시오. (2)이 클래스는 이제 레거시이며 java.time 클래스로 대체되었습니다.
Basil Bourque 2017 년

1

Kotlin에서이 솔루션을 사용합니다.

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String


0
//selected date from calender
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); //Date and time
String currentDate = sdf.format(myCalendar.getTime());

//selcted_day name
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE");
String dayofweek=sdf_.format(myCalendar.getTime());
current_date.setText(currentDate);
lbl_current_date.setText(dayofweek);

Log.e("dayname", dayofweek);

1
읽을 수 없습니다. 그리고 당신은 잘못 설계된 클래스와 오래 전에 구식 SimpleDateFormat, DateCalendar(질문에서도 사용됨)을 사용하고 있습니다.
Ole VV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.