2013-08-15 69 views
29

tôi đã cố gắng để có được một chuỗi với tên của các ngày trong tuần thực tế theo cách này:Android Lịch có được ngày hiện tại trong tuần như chuỗi

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

nhưng weekDay ở lại luôn rỗng và tôi thực sự không có ý tưởng tại sao vì debugger nói rằng dayOfWeek là 5 vì vậy tôi nên bằng c.get(Calendar.THURSDAY)

+0

các * loại * của 'c.get (' Một 'int' Hoặc' Integer' là gì loại tham chiếu – hexafraction

+0

của nó một int ..... – ntm

+0

chỉ cần sử dụng một mảng, tại sao bạn cần nếu khác String [] ngày = new String [] {"Monday" .... mặc dù nó là an toàn hơn để thực sự nhanh chóng bên trong một phương thức. days [Calendar.getInstance(). get (Lịch.Day_OF_WEEK)] nên làm thủ thuật. tháng và ngày là 0 dựa trên gói utils –

Trả lời

14

Bạn có nghĩa vụ phải so sánh trực tiếp với dayOfWeek Calendar.MONDAY vv Xem mã bên dưới

Ngoài ra, tôi đã đặt dấu ngoặc xung quanh nếu người nào khác. Không dựa vào thụt lề cho dòng mã, đặt dấu ngoặc đơn ngay cả khi if-else của bạn chỉ có một câu lệnh.

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

Không có nhu cầu sử dụng các 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); 

và đầu ra:

thursday 

Bạn có thể thấy lỗi của bạn nếu bạn cố gắng để in các giá trị với c.get với mã này

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

Ví dụ tôi nhận được:

7 
33 
3 
15 
227 
5 
2013 

Và kết quả sẽ là không chính xác, trong trường hợp của tôi, tôi có được Sunday như weekDay nếu tôi sử dụng mã của bạn.

1

thử này

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

tôi thực hiện điều này bằng cách làm như sau:

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

Calendar calendar = Calendar.getInstance(); 
weekDay = dayFormat.format(calendar.getTime()); 
  • Sử dụng định dạng ngày cho "EEEE" sẽ trở lại với tên ngày tuần đầy đủ, tức là thứ ba
  • Sử dụng định dạng ngày cho "E" sẽ trả lại tên viết tắt, nghĩa là Tue
  • Một lợi ích khác cho r eturning định dạng này trong Android là nó sẽ dịch các ngày trong tuần dựa trên miền địa phương.

Bạn sẽ muốn xem lại SimpleDateFormat để tìm hiểu thêm. Tôi nghĩ rằng đây là cách tiếp cận sạch sẽ nhất mà bạn không cần chuyển đổi hoặc nếu câu hỏi nếu nhu cầu duy nhất của bạn là nhận giá trị chuỗi.

+7

Đây chắc chắn là câu trả lời hay nhất. Đơn giản và đẹp. Cảm ơn! Có lẽ thay vì Locale.US tôi sẽ sử dụng Locale.getDefault(). –

59

Đơn giản như này

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

đây là câu trả lời hay nhất – keybee

+0

Vì vậy, nó sử dụng ngôn ngữ mặc định ... Có thể sử dụng 'Ngữ cảnh' để lấy ngôn ngữ? –

+0

@EarthEngine 'Locale.getDefault()' phải trả về ngôn ngữ của thiết bị Android. –

2

chỉ làm như sau:?

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