Java день недели из строки

#java #date #calendar #simpledateformat #dayofweek

#java #Дата #Календарь #simpledateformat #день недели

Вопрос:

У меня есть этот простой код:

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2011-10-29");
calendar.setTime(date);
Log.d("Debug","Day of the week = " (calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY));
 

29 октября — суббота, так почему я получаю false?

Комментарии:

1. Какой язык использует ваш экземпляр календаря? Возможно, это имеет значение, потому что этот код возвращает true для меня.

2. Действительно? Я сделал Calendar.getInstance(); это неправильно?

3. @doubter: запишите календарную дату, чтобы увидеть, что вы передали в качестве даты

Ответ №1:

Вот пример того, как это может произойти…

     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;
    try {
        date = format.parse("2011-10-29");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    calendar.setTime(date);
    System.out.println("Day of the week = "
              (calendar.get(Calendar.DAY_OF_WEEK)));
    System.out.println("Saturday? "
              (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY));

    try {
        date = format.parse("2011-10-29");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    calendar = Calendar.getInstance(TimeZone.getTimeZone("PST"));
    calendar.setTime(date);
    System.out.println("Day of the week = "
              (calendar.get(Calendar.DAY_OF_WEEK)));
    System.out.println("Saturday? "
              (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY));
 

который выводит

 Day of the week = 7
Saturday? true
Day of the week = 6
Saturday? false
 

так что да, в зависимости от того, в каком часовом поясе вы находитесь, будет или не будет суббота.

Комментарии:

1. день недели не зависит от часового пояса, 2011-10-29 везде была суббота

Ответ №2:

Получение true с помощью следующего кода:

     try {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = format.parse("2011-10-29");
        Calendar cal = GregorianCalendar.getInstance();
        cal.setTime(date);
        System.out.println(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY);
    }
    catch(Exception e) {
        e.printStackTrace();
    }
 

Может быть, настройка локали?