Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Таймер


Автор: LAKERS 30.3.2006, 09:24
программка для КПК, надо чтобы в определенное время на КПК(программка уже запущена) запускалось какое-то действие...например, нажатие кнопки...
в JDK 1.1.8 из java.util.Date есть только 2 конструктора: Date() и Date(long) и 7 методов: after, before, equals, getTime, hashCode, setTime и toString, остальные Deprecated...????

Автор: batigoal 30.3.2006, 09:56
Посмотри в сторону класса Calendar.

Автор: LAKERS 30.3.2006, 16:21
а нельзя использовать Date? в принципе таймер не нужен, программа будет запущена и надо чтобы она сравнивала текущую дату на КПК с заданной и во время равенства их выполнила действие, допустим нажатие кнопки, как это осуществить? допустим надо сравнить текущую дату с 1 мая 2006 г.

Код

Date d = new Date()
...
if (d.equals???)




Автор: LSD 30.3.2006, 16:30
Date и нужно использовать. Просто если у тебя есть дата в виде компонент: число, месяц, год, то тебе понадобится Calendar для того чтобы получить объект типа Date. Как работать с Calendar есть у нас в FAQ.

Автор: LAKERS 31.3.2006, 10:05
хорошо поставим вопрос так, нужен кусок кода, сравнивающий текущую дату в каждый момент времени если программка запущена на КПК с заданной, допустим с 1 мая 2006 г. 12 часов 13 минут 00 секунд и если дата текущая совпала с заданной, то нажималась бы кнопка...

Автор: LSD 31.3.2006, 10:54
Метод вернет true если переданная дата уже наступила.
Код
public static boolean checkTime(Date date)
{
  return date.getTime() >= System.currentTimeMillis();
}

Автор: LAKERS 31.3.2006, 13:46
а как мне обьявить дату 1 мая 2006 г. 13 ч 20 мин. 00 сек.?

Автор: LSD 31.3.2006, 16:04
http://vingrad.ru/JAVA-ART-002950!

Автор: LAKERS 31.3.2006, 17:37
да читал я FAQ так и не понял...

Автор: LSD 31.3.2006, 20:12
Ну уж не знаю как ты его читал smile
Цитата
Получить дату по году, месяцу и дню месяца:
Код
calendar.clear();    
calendar.set(year, month, day);    
return calendar.getTime();


В твоем примере надо будет:
Код
calendar.clear();
calendar.set(2006, Calendar.MAY, 1, 13, 20, 0);
return calendar.getTime();

Автор: LAKERS 1.4.2006, 17:16
получаю текущую дату, сравниваю ее с заданной, должно выдаваться сообщение...
что неправильно делаю?

Код

final long time = System.currentTimeMillis();
    System.out.println(time);
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(2006,3,1,18,10,0);
date = cal.getTime();
w1 = date.getTime();
System.out.println(date);
       System.out.println(w1);
        if (time == w1)
    {
        System.out.println("Настало наше время");
    }

Автор: LSD 1.4.2006, 18:08
Дата в Java хранится в миллисекундах и сравнивая даты с помощью == ты скорее всего не поймаешь момент когда они будут равны.
Код
  public static void waitFor(Date date) throws InterruptedException
  {
    long hourX = date.getTime();
    long amount = hourX - System.currentTimeMillis();
    while(amount > 0)
    {
      Thread.sleep(amount);
      amount = hourX - System.currentTimeMillis();
    }
  }

  public static void main(String[] args) throws InterruptedException
  {
    Calendar calendar = Calendar.getInstance();
    calendar.clear();
    calendar.set(2006, Calendar.APRIL, 1, 19, 6, 0);
    waitFor(calendar.getTime());
    System.out.println("Настало наше время: " + new Date());
  }

Автор: LAKERS 2.4.2006, 12:26
а как устранить проблему с переводом времени на час, сейчас по крайней мере с этим проблема, System.currentTimeMillis() на час больше чем hourX, да и потом, осенью чтобы тоже не было проблем как этого избежать?

Автор: LSD 2.4.2006, 12:58
Цитата(LAKERS @ 2.4.2006, 13:26 Найти цитируемый пост)
а как устранить проблему с переводом времени на час, сейчас по крайней мере с этим проблема, System.currentTimeMillis() на час больше чем hourX, да и потом, осенью чтобы тоже не было проблем как этого избежать?

System.currentTimeMillis() возвращает время по UTC. Тебе нужно правильно создавать Calendar, по умолчанию он создается для системной временной зоны. В частности для Москвы есть две зоны MSD - Moscow Daylight Time и MSK - Moscow Standard Time (вернее это одна временная зона, но с учетом летнего времени и без него). Если ты хочешь избежать проблем с переводом часов, часовыми поясам и т.п. Используй UTC:
Код
SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy G  HH:mm:ss.SSS zzzz");
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.clear();
calendar.set(2006, Calendar.APRIL, 2, 14, 0, 0);
System.out.println(dateFormat.format(calendar.getTime()));

В результате получишь: 02 Апрель 2006 н.э. 18:00:00.000 Moscow Daylight Time. Т.е 14:00:00 UTC - соответсвует 18:00:00 по Москве.

Правда как ты будешь пользователям эти навороты объяснять я не знаю.

Автор: LAKERS 2.4.2006, 12:59
а как вместо System.out.println("Настало наше время: " + new Date()); сделать так чтобы была нажата кнопка Open в методе actionPerformed???

Автор: LAKERS 2.4.2006, 17:04
Цитата(LSD @ 2.4.2006, 12:58 Найти цитируемый пост)
В результате получишь: 02 Апрель 2006 н.э. 18:00:00.000 Moscow Daylight Time. Т.е 14:00:00 UTC - соответсвует 18:00:00 по Москве.

почему-то получаю не 18 а 17 часов ????

Автор: LSD 3.4.2006, 12:04
Цитата(LAKERS @ 2.4.2006, 18:04 Найти цитируемый пост)
почему-то получаю не 18 а 17 часов ????

А что у тебя выдаст такой код:
Код
System.out.println(TimeZone.getDefault());

Автор: LAKERS 3.4.2006, 14:28
java.util.SimpleTimeZone[id=EAT, offset=10800000, dstSavings=3600000, useDayliпре=false...остальное по нулям...

Автор: LSD 3.4.2006, 22:56
Проблема в
Цитата(LAKERS @ 3.4.2006, 15:28 Найти цитируемый пост)
java.util.SimpleTimeZone[id=EAT, offset=10800000, dstSavings=3600000, useDayliпре=false...остальное по нулям...

видать старая JVM некоректо определяет момент перехода на летнее время (а может вообще его не учитывает). Поэтому разница не 4 часа, а только 3.
И кстати, ты должен был получить не 02 Апрель 2006 н.э. 18:00:00.000 Moscow Daylight Time, а 02 Апрель 2006 н.э. 18:00:00.000 Moscow Standard Time.

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