2013-08-15 11 views
29

Ich habe versucht, auf diese Weise eine Zeichenfolge mit dem Namen des aktuellen Wochentag zu erhalten:Android Kalender erhalten aktuellen Wochentag als String

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

aber weekDay bleibt immer null, und ich habe wirklich keine Ahnung, warum, weil der Debugger sagt, dass dayOfWeek 5 so sollte ich mit Calendar.MONDAY direkt an c.get(Calendar.THURSDAY)

+0

Was ist die * Typ * von 'c.get (' 'Ein int' Oder das' Integer'? Referenztyp? – hexafraction

+0

es ist ein int ..... – ntm

+0

Verwenden Sie einfach ein Array, warum brauchen Sie wenn sonst. String [] Tage = new String [] {"Montag" .... obwohl es sicherer ist, tatsächlich instanziieren eine Methode Tage [Calendar.getInstance(). get (Kalender.Day_OF_WEEK)] sollte den Trick machen. Monat und Tag sind 0 im Paket utils –

Antwort

14

Sie sollen dayOfWeek gleich vergleichen usw. Code siehe unten

auch habe ich Klammern, wenn sonst setzen. Verlassen Sie sich nicht auf Einrückungen für den Code-Fluss, setzen Sie Klammern explizit, auch wenn Ihr if-else nur eine Anweisung enthält.

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

Es gibt keine Notwendigkeit, die 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); 

und Ausgang zu verwenden war:

thursday 

Sie sehen Ihre Fehler, wenn Sie versuchen, die Werte mit c.get mit diesem Code drucken

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

Zum Beispiel bekomme ich:

7 
33 
3 
15 
227 
5 
2013 

Und das Ergebnis wird falsch sein, in meinem Fall ich Sunday als weekDay, wenn ich Ihren Code verwenden.

1

versuchen diese

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

ich dies, indem Sie die folgenden Schritte durchgeführt:

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

Calendar calendar = Calendar.getInstance(); 
weekDay = dayFormat.format(calendar.getTime()); 
  • Verwenden Sie den Tag-Format für "EEEE" wird wieder die volle Name des Wochentags, also Dienstag
  • Verwenden Sie das Tagesformat für "E" wird den abgekürzten Namen zurückgeben, dh Di
  • Ein weiterer Vorteil für r Um dieses Format in Android zu ändern, wird der Wochentag basierend auf dem Gebietsschema übersetzt.

Sie möchten die SimpleDateFormat überprüfen, um mehr zu erfahren. Ich denke, das ist der sauberste Ansatz, dass Sie keine Schalter oder wenn Anweisung brauchen, wenn Sie nur den String-Wert erhalten müssen.

+7

Dies ist definitiv die beste Antwort. Einfach und schön. Danke! Vielleicht würde ich Locale.getDefault() anstelle von Locale.US verwenden. –

59

So einfach diese

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

das ist die beste Antwort – keybee

+0

So dass es das Standardgebietsschema verwendet ... Kann es 'Context' verwenden, um das Gebietsschema zu erhalten? –

+0

@EarthEngine 'Locale.getDefault()' sollte das Gebietsschema des Android-Geräts zurückgeben. –

2

tun nur die folgenden:

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