2013-08-15 4 views
29

я пытался получить строку с именем фактического будний день так: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)

+0

Что такое * тип * из 'c.get (' 'int' Или' Integer'? ссылочный тип? – hexafraction

+0

его a int ..... – ntm

+0

просто используйте массив, зачем вам это нужно. String [] days = new String [] {"Monday" .... хотя безопаснее фактически создавать внутри метод. days [Calendar.getInstance(). get (Календарь.Day_OF_WEEK)] должен сделать трюк. месяц и день равны 0 в пакете utils –

ответ

14

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

} 
0

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

1

попробовать это

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

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

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

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

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

+7

Это, безусловно, лучший ответ. Просто и красиво. Спасибо! Возможно, вместо Locale.US я бы использовал Locale.getDefault(). –

59

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

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

Это лучший ответ – keybee

+0

Чтобы он использовал локаль по умолчанию ... Может ли он использовать 'Context' для получения локали? –

+0

@EarthEngine 'Locale.getDefault()' должен возвращать языковой стандарт устройства Android. –

2

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

Date date = new Date(); 
    CharSequence time = DateFormat.format("EEEE", date.getTime()); // gives like (Wednesday) 
Смежные вопросы