Pregunta

I need name of day in week but dependent o actual date and date to future. For example I need name of day today, then name of day tomorrow, name of date +2 days etc I make this code but not working good. So is there any better way how I can in android get name of day?

 public String getDay3Name() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        String[] days = new String[] { "SUNDAY","SUNDAY","SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
        String day = days[calendar.get(Calendar.DAY_OF_WEEK)+1];
        return day;
    }
    public String getDay4Name() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        String[] days = new String[] { "SUNDAY","SUNDAY","SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
        String day = days[calendar.get(Calendar.DAY_OF_WEEK)+2];
        return day;
    }
¿Fue útil?

Solución

import java.util.Calendar;
import java.util.Locale;


public class CalSample {

    private static final int TODAY = 0;
    private static final int TOMORROW = 1;
    private static final int DAY_AFTER_TOMORROW = 2;
    private static final int THREE_DAYS_FROM_TODAY = 3;
    private static final int FOUR_DAYS_FROM_TODAY = 4;
    private static final int FIVE_DAYS_FROM_TODAY = 5;
    private static final int SIX_DAYS_FROM_TODAY = 6;

    public static void main(String args[]){
        CalSample calSample = new CalSample();
        calSample.getNameOfDayOfWeek(TODAY);
        calSample.getNameOfDayOfWeek(TOMORROW);
        calSample.getNameOfDayOfWeek(DAY_AFTER_TOMORROW);
        calSample.getNameOfDayOfWeek(THREE_DAYS_FROM_TODAY);
        calSample.getNameOfDayOfWeek(FOUR_DAYS_FROM_TODAY);
        calSample.getNameOfDayOfWeek(SIX_DAYS_FROM_TODAY);

    }
    public String getNameOfDayOfWeek(int noOfDaysFromToday){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, noOfDaysFromToday);
        String name = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH);
        System.out.println("Day Of Week:- " + name);
        return name;
    }
}

Otros consejos

You can directly use

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US);

where calendar has been set using

calendar.setTime();

You can set the day in calendar with -

calendar.set(int year, int month, int day);

Hope that helps

Firstly, you are doing well with getting day names from a String array, but it will be better if you get them from a resource(strings.xml) for future multiple language support.

Secondly you should know what kind of result that you are getting from calendar.get(Calendar.DAY_OF_WEEK); method:

Calendar.SUNDAY    = (1)
Calendar.MONDAY    = (2)
Calendar.TUESDAY   = (3)
Calendar.WEDNESDAY = (4)
Calendar.THURSDAY  = (5)
Calendar.FRIDAY    = (6)
Calendar.SATURDAY  = (7)

Finally, your day name array is wrong;

new String[] { "SUNDAY","SUNDAY","SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };

It should be;

new String[] {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };

And you can try methods below, they are just a little bit modified of yours.

/**
 * 
 * @param next
 * @return
 * 
 * send next 0 if you want to get current day name 
 */
public String getDayName(int next) {
    int dayIndex = getCurrentDayIndex() - 1;
    dayIndex += next;
    dayIndex = dayIndex % 7;

    String[] days = new String[] {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
    String day = days[dayIndex];
    return day;
}

/**
 * 
 * @return  1,2,3,4,5,6 or 7
 */
public int getCurrentDayIndex() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());   
    int dayIndex = calendar.get(Calendar.DAY_OF_WEEK);
    return dayIndex;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top