Календарь Android получает текущий день недели в виде строки

я попытался получить строку с названием фактического дня недели следующим образом:

            Calendar c = Calendar.getInstance();
            int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

            if (c.get(Calendar.MONDAY) == dayOfWeek) weekDay = "monday";
            else if (c.get(Calendar.TUESDAY) == dayOfWeek) weekDay = "tuesday";
            else if (c.get(Calendar.WEDNESDAY) == dayOfWeek) weekDay = "wednesday";
            else if (c.get(Calendar.THURSDAY) == dayOfWeek) weekDay = "thursday";
            else if (c.get(Calendar.FRIDAY) == dayOfWeek) weekDay = "friday";
            else if (c.get(Calendar.SATURDAY) == dayOfWeek) weekDay = "saturday";
            else if (c.get(Calendar.SUNDAY) == dayOfWeek) weekDay = "sunday";

но weekDay всегда остается нулевым, и я на самом деле понятия не имею, почему, потому что отладчик говорит, что dayOfWeek равно 5, поэтому я должен быть равен c.get(Calendar.THURSDAY)


person ntm    schedule 15.08.2013    source источник
comment
Каков тип c.get(? int? Или ссылочный тип Integer?   -  person nanofarad    schedule 15.08.2013
comment
просто используйте массив, зачем вам это нужно, если еще. String[] days=new String[]{Monday.... хотя на самом деле безопаснее создавать экземпляр внутри метода. days[Calendar.getInstance().get(Calendar.Day_OF_WEEK)] должен помочь. месяц и день равны 0 в пакете utils   -  person Andrew Scott Evans    schedule 29.04.2014


Ответы (6)


Так просто, как это

sCalendar = Calendar.getInstance();
String dayLongName = sCalendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
person sandalone    schedule 24.04.2014
comment
Чтобы он использовал локаль по умолчанию... Можно ли использовать Context для получения локали? - person Earth Engine; 26.08.2014
comment
@EarthEngine Locale.getDefault() должен возвращать языковой стандарт устройства Android. - person Mateus Viccari; 16.02.2017

Я достиг этого, выполнив следующие действия:

String weekDay;
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE", Locale.US);

Calendar calendar = Calendar.getInstance();
weekDay = dayFormat.format(calendar.getTime());
  • Используйте формат дня для «EEEE», чтобы вернуть полное название дня недели, т. Е. Вторник.
  • Используйте формат дня для «E», чтобы вернуть сокращенное имя, т. Е. Вт.
  • Еще одним преимуществом возврата этого формата в Android является перевод дня недели в зависимости от локали.

Вы можете просмотреть SimpleDateFormat, чтобы узнать больше. Я думаю, что это самый чистый подход, поскольку вам не нужен оператор switch или if, если вам нужно только получить строковое значение.

person Don Gossett    schedule 21.11.2013
comment
Это определенно лучший ответ. Просто и красиво. Спасибо! Возможно, вместо Locale.US я бы использовал Locale.getDefault(). - person Joao Sousa; 19.12.2013

Вы должны сравнивать dayOfWeek напрямую с Calendar.MONDAY и т. д. См. код ниже.

Кроме того, я поставил скобки, если еще. Не полагайтесь на отступы для потока кода, явно ставьте квадратные скобки, даже если ваш if-else имеет только один оператор.

    public static void main(String[] args) {

    String weekDay = "";

    Calendar c = Calendar.getInstance();
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

    if (Calendar.MONDAY == dayOfWeek) {
        weekDay = "monday";
    } else if (Calendar.TUESDAY == dayOfWeek) {
        weekDay = "tuesday";
    } else if (Calendar.WEDNESDAY == dayOfWeek) {
        weekDay = "wednesday";
    } else if (Calendar.THURSDAY == dayOfWeek) {
        weekDay = "thursday";
    } else if (Calendar.FRIDAY == dayOfWeek) {
        weekDay = "friday";
    } else if (Calendar.SATURDAY == dayOfWeek) {
        weekDay = "saturday";
    } else if (Calendar.SUNDAY == dayOfWeek) {
        weekDay = "sunday";
    }

    System.out.println(weekDay);

}
person arun_gopalan    schedule 15.08.2013

Не было необходимости использовать c.get

    Calendar c = Calendar.getInstance();
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);                

    if (Calendar.MONDAY == dayOfWeek) weekDay = "monday";
    else if (Calendar.TUESDAY == dayOfWeek) weekDay = "tuesday";
    else if (Calendar.WEDNESDAY == dayOfWeek) weekDay = "wednesday";
    else if (Calendar.THURSDAY == dayOfWeek) weekDay = "thursday";
    else if (Calendar.FRIDAY == dayOfWeek) weekDay = "friday";
    else if (Calendar.SATURDAY == dayOfWeek) weekDay = "saturday";
    else if (Calendar.SUNDAY == dayOfWeek) weekDay = "sunday";

    System.out.println(weekDay);

и вывод:

thursday

Вы можете увидеть свою ошибку, если попытаетесь распечатать значения с помощью c.get с помощью этого кода.

    System.out.println(c.get(Calendar.MONDAY));
    System.out.println(c.get(Calendar.TUESDAY));
    System.out.println(c.get(Calendar.WEDNESDAY));
    System.out.println(c.get(Calendar.THURSDAY));
    System.out.println(c.get(Calendar.FRIDAY));
    System.out.println(c.get(Calendar.SATURDAY));
    System.out.println(c.get(Calendar.SUNDAY));

Например, я получаю:

7
33
3
15
227
5
2013

И результат будет неверным, в моем случае я получаю Sunday как weekDay, если использую ваш код.

person Oscerd    schedule 15.08.2013

просто сделайте следующее:

    Date date = new Date();
    CharSequence time = DateFormat.format("EEEE", date.getTime()); // gives like (Wednesday)
person Muhammed Refaat    schedule 22.10.2014

попробуй это

import java.text.DateFormatSymbols;
import java.util.Date;
...
String[] weekdays = new DateFormatSymbols().getWeekdays();
String[] month = new DateFormatSymbols().getMonths();
System.outprintln(weekdays[date.getDay()+1]+","+month[date.getMonth()]+" "+date.getDate());
person gifpif    schedule 14.10.2013