Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Непонятки с датой


Автор: Majesty 15.10.2010, 08:29
Нужно добавить к определённой дате 40 недель
Код

int WEEK = 7*24*3600*1000;
long tstamp = DateField.getDate().getTime(); // задали 27.04.2010

Calendar c = Calendar.getInstance();
c.setTime(new Date(tstamp + 40*WEEK));

String pEndDate = String.valueOf(
   c.get(Calendar.DAY_OF_MONTH)
) + "." + String.valueOf(
   c.get(Calendar.MONTH)
) + "." + String.valueOf(
   c.get(Calendar.YEAR)
); // и получили 3.3.2010
Почему так происходит и как сделать правильно?

Автор: sanboll 16.10.2010, 13:46
Проблемма в c.get(Calendar.MONTH). Он возвращает КОНСТАНТУ, а не номер месяца.

Calendar.JANUARY - январь,  Calendar.FEBRUARY - февраль и т.д.

Автор: Majesty 16.10.2010, 19:11
Цитата(sanboll @  16.10.2010,  13:46 Найти цитируемый пост)
Проблемма в c.get(Calendar.MONTH). Он возвращает КОНСТАНТУ, а не номер месяца.
я, видимо, совсем тупой... http://download.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/java/util/Calendar.html#get(int) утверждает, что
Цитата
Returns:
the value for the given time field.
т.е. не константу, а всё-таки значение... это во-первых.
во-вторых, год тоже не попадает. должно быть примерно 27 января 2011 года, а не 3 апреля 2010.

Автор: Antropoid 16.10.2010, 22:11
у тебя просто Overflow получается. Сам смотри
Код

long WEEK = 40*7*24*3600*1000;
System.out.println(WEEK);

-1577803776

Автор: Majesty 17.10.2010, 06:54
Хммм... Понятно. Как же тогда сконструировать дату на 40 недель больше, чем текущая?

Автор: Antropoid 17.10.2010, 21:52
в цикле например прибавлять по одной неделе

Автор: Majesty 18.10.2010, 05:42
Тоже думал об этом. Некрасивое и более медленное решение smile

Автор: firedrago 18.10.2010, 09:26
зачем все так сложно ?!

c.add(Calendar.WEEK_OF_YEAR, 40);

Код

long tstamp = DateField.getDate().getTime(); // задали 27.04.2010
Calendar c = Calendar.getInstance();
c.setTime(new Date(tstamp));
c.add(Calendar.WEEK_OF_YEAR,40);
String pEndDate = String.valueOf(
   c.get(Calendar.DAY_OF_MONTH)
) + "." + String.valueOf(
   c.get(Calendar.MONTH)
) + "." + String.valueOf(
   c.get(Calendar.YEAR)
); // и получили 3.3.2010

Автор: Majesty 18.10.2010, 11:21
К сожалению, в документации ни слова нет про метод Calendar.add(), а компилятор ничего не знает про поле Calendar.WEEK_OF_YEAR :(

Автор: Antropoid 18.10.2010, 11:43
Цитата(Majesty @  18.10.2010,  05:42 Найти цитируемый пост)
Некрасивое и более медленное

?
Тебя точно эти параметры беспокоят?  smile 

Автор: Majesty 18.10.2010, 12:58
Цитата(Antropoid @  18.10.2010,  11:43 Найти цитируемый пост)
Тебя точно эти параметры беспокоят?
да, в общем-то, нет smile рассчитывается однажды в одном месте, плюс при желании можно закешировать в RecordStore (хотя это и лишнее)... но некрасиво - да smile костыль, так сказать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)