Intereting Posts
SDK Google Analytics: отслеживание имени моей версии приложения и модели устройства Андроидальная база данных sqlite для предварительного заполнения Попытка поймать Volume onKeyLongPress () не работает Этот класс обработчика должен быть статическим или может возникнуть утечка (com.test.test3.ui.MainActivity.1) Различия между различными типами трансляций в android Встроенная USB-отладка на Chrome 32 не обнаруживает устройство Как установить разные высоты для каждой строки в ListView? Android.net.wifi.STATE_CHANGE: не срабатывает при отключении Wi-Fi Метод android finish () не очищает приложение из памяти Проблемы с UI в конвертированных приложениях для Android на платформу BlackBerry Динамически добавлять макет в метод getview адаптера в android Невозможно загрузить собственную разделяемую библиотеку с зависимостями в приложении для активной активности Карты Google не отображаются на устройстве Android Android Tabbed Layout setContent Как получать уведомления, когда приложение закрыто в Android

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

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