Еще учтите, что у пользователя может быть криво выставлен часовой пояс, и его GMT0 может отличаться от истинного:)
В общем-то, чтобы это решить, надо чтобы сервер присылал не только время окончания события, а еще и «сколько сейчас времени по мнению сервера на GMT0». Далее надо получить специфичное для клиента время по GMT0. Вычитаем одно из другого и сразу получаем поправку на и сетевые лаги и на неправильные часы в устройстве.