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

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

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 всегда остается weekDay нулю, и я действительно понятия не имею, почему, поскольку отладчик говорит, что dayOfWeek равен 5, поэтому я должен быть равен c.get(Calendar.THURSDAY)

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

 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, если только вам нужно получить строковое значение.

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

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

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

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

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

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

попробуй это

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

Надеюсь, что этот код поможет вам. 🙂