Подтвердить что ты не робот

Календарь 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)

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Проще, чем этот

sCalendar = Calendar.getInstance();
String dayLongName = sCalendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

Ответ 3

Вы должны сравнить 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);

}

Ответ 4

попробуйте это

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());

Ответ 5

просто выполните следующие действия:

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

Ответ 6

Не нужно было использовать 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, если я использую ваш код.