Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Странный (или неочевидный) GregorianCalendar

2.1K
08 мая 2008 года
госик
98 / / 20.11.2006
я не понимаю, каким образом можно поставить дату в Григорианский календарь. Вот смотрите:

Код:
private Date fromStringToDate(String strDate)
    {
        StringTokenizer tokenizer = new StringTokenizer(strDate, ".");
        GregorianCalendar calendar = new GregorianCalendar(1918, Calendar.JANUARY, 1);
        String str1 = tokenizer.nextToken();
        String str2 = tokenizer.nextToken();
        String str3 = tokenizer.nextToken();
//        calendar.setTime(new Date(Integer.parseInt(str3), Integer.parseInt(str2), Integer.parseInt(str1)));
//        calendar.set(Integer.parseInt(str3), Integer.parseInt(str2), Integer.parseInt(str1));
        calendar.set(GregorianCalendar.DAY_OF_MONTH, Integer.parseInt(str1));
        calendar.set(GregorianCalendar.MONTH, Integer.parseInt(str2));
        calendar.set(GregorianCalendar.YEAR, Integer.parseInt(str3));
        String str = calendar.getTime().toString();
        return calendar.getTime();
    }



на вход подается строка в виде: 6.04.2008. токенайзер ее разбивает на кусочки, в моем случае на 6, 4, 2008.
день ставится, месяц остается текущий (т.е. май), это во-первых.
дальше у меня String str - строка просто для того, чтобы убедиться, что getTime вернул дату. дальше из ф-ии возвращаю calendar.getTime(). Упс, возвращает null, это во-вторых. ПОЧЕМУ???? Ведь я убедилась строкой выше, что str заполняется датой.

причем закомментированные варианты приводят к тому же результату
37K
08 мая 2008 года
iyulka
12 / / 06.05.2008
Цитата: госик
месяц остается текущий (т.е. май)


месяцы нумеруются с нуля ;) так что, следует писать так:

 
Код:
calendar.set(GregorianCalendar.MONTH, Integer.parseInt(str2)-1);


Цитата: госик
дальше из ф-ии возвращаю calendar.getTime(). Упс, возвращает null


вот это не понятно, у меня замечательно возвращает дату.

2.1K
08 мая 2008 года
госик
98 / / 20.11.2006
так хорошо. месяцы нумеруются с нуля, а дни что с 1?
2.1K
08 мая 2008 года
госик
98 / / 20.11.2006
вроде поняла, оказывается возвращает нормальную дату. ошибку нашла в другом совсем месте. а когда в отладке смотрела, там реально был null только у cdate. хм... других полей, связанных с датой, не было. да уж... точно не очевидно.
37K
12 мая 2008 года
iyulka
12 / / 06.05.2008
Цитата: госик
так хорошо. месяцы нумеруются с нуля, а дни что с 1?


да, с 1, но 1 - это воскресенье =)
вот вырвала из Calendar.class:

 
Код:
public final static int SUNDAY = 1;
public final static int MONDAY = 2;
public final static int TUESDAY = 3;
public final static int WEDNESDAY = 4;
public final static int THURSDAY = 5;
public final static int FRIDAY = 6;
public final static int SATURDAY = 7;
63
12 мая 2008 года
Zorkus
2.6K / / 04.11.2006
[quote=JAVADOC]
setFirstDayOfWeek

public void setFirstDayOfWeek(int value)

Sets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France.

Parameters:
value - the given first day of the week.
See Also:
getFirstDayOfWeek(), getMinimalDaysInFirstWeek()


[/quote]
Так что тут все не так просто :).
Вполне может быть, что при локализации приложения такие вещи меняются хитрым образом (сейчас нету времени раскурить дальше ман;)).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог