2013-08-15 15 views
29

ho cercato di ottenere una stringa con il nome del giorno della settimana attuale in questo modo:Android Calendario ottenere corrente giorno della settimana come stringa

  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"; 

ma weekDay soggiorni sempre nullo e io in realtà non hanno alcuna idea del perché perché il debugger dice che è dayOfWeek 5 quindi dovrei essere pari a c.get(Calendar.THURSDAY)

+0

Qual è il * tipo * di 'c.get (' 'Un int' O il' Integer'?? tipo di riferimento? – hexafraction

+0

è un int ... – ntm

+0

basta usare un array, perché è necessario se altrimenti. String [] days = new String [] {"Monday" .... anche se è più sicuro creare un'istanza all'interno un metodo. days [Calendar.getInstance(). get (Calendar.Day_OF_WEEK)] dovrebbe fare il trucco. mese e giorno sono 0 in base al pacchetto utils –

risposta

14

Si suppone di confrontare direttamente con dayOfWeek Calendar.MONDAY ecc Vedi codice qui sotto

Inoltre, ho messo tra parentesi intorno se il resto. Non fare affidamento sui rientri per il flusso di codice, metti espressamente parentesi anche se il tuo if-else ha solo una dichiarazione.

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

Non c'era alcun bisogno di usare il 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); 

e uscita:

thursday 

Potete vedere il vostro errore se si tenta di stampare i valori con c.get con questo codice

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

Per esempio ottengo:

7 
33 
3 
15 
227 
5 
2013 

E il risultato non sarà corretto, nel mio caso ho Sunday come weekDay se uso il vostro codice.

1

provare questo

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

Ho compiuto questo nel modo seguente:

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

Calendar calendar = Calendar.getInstance(); 
weekDay = dayFormat.format(calendar.getTime()); 
  • Utilizzare il formato giorno per "EEEE" restituirà il nome completo giorno della settimana, vale a dire Martedì
  • Usa il formato del giorno per "E" restituirà il nome abbreviato, ovvero Tue
  • Un altro vantaggio per eturning questo formato in Android è che tradurrà il giorno della settimana in base alle impostazioni locali.

Si consiglia di rivedere il SimpleDateFormat per ulteriori informazioni. Penso che questo sia l'approccio più pulito in quanto non è necessario uno switch o se l'istruzione se l'unica necessità è ottenere il valore di stringa.

+7

Questa è sicuramente la migliore risposta. Semplice e bello. Grazie! Forse invece di Locale.US userei Locale.getDefault(). –

59

Semplice come questo

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

questa è la migliore risposta – keybee

+0

In modo che usi le impostazioni internazionali predefinite ... È in grado di usare 'Contesto' per ottenere le impostazioni internazionali? –

+0

@EarthEngine 'Locale.getDefault()' deve restituire la locale del dispositivo Android. –

2

semplicemente effettuare le seguenti operazioni:

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