Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
#1

Что случилось с датой? - Android

27.10.2014, 13:53. Просмотров 550. Ответов 17
Метки нет (Все метки)

Есть функция:
Java
1
2
3
4
5
6
7
8
public long getCVMillis() {
    Calendar calendar = new GregorianCalendar(Locale.getDefault());
    calendar.set(Calendar.HOUR_OF_DAY, calendar.getMinimum(Calendar.HOUR_OF_DAY));
    calendar.set(Calendar.MINUTE, calendar.getMinimum(Calendar.MINUTE));
    calendar.set(Calendar.SECOND, calendar.getMinimum(Calendar.SECOND));
    
    return calendar.getTimeInMillis();
}
тут явно обнуляется часы, минуты, секунды.
Запускаю сегодня (‎27.‎10‎.‎2014) почему она возвращает 1414346400790 - это ‎26‎.‎10‎.‎2014‎ ‎23‎:‎00‎:‎00

предыдущий день и 23 часа что за бардак???????????????

Добавлено через 1 минуту
Господа, помогите вычислить корректно текущую дату с обнулением времени...
Срочно нужна помощь...
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 16:43     Что случилось с датой? #2
Java
1
2
3
4
public static Calendar getCalendar(){
        TimeZone tz = TimeZone.getDefault();
        return Calendar.getInstance(tz);
    }
Java
1
2
3
4
5
public static int[] getCurrentTime() {
        final Calendar c = getCalendar();
        int[] res = new int[] {c.get(Calendar.YEAR),c.get(Calendar.MONTH)+1,c.get(Calendar.DAY_OF_MONTH),c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),c.get(Calendar.SECOND),c.get(Calendar.MILLISECOND)};
        return res;
    }
Вторая функция как пример.
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 16:59  [ТС]     Что случилось с датой? #3
Java
1
2
3
4
5
6
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz);
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));
функция запущена ‎27‎.‎10‎.‎2014‎ ‎18‎:‎57‎:‎16 и вернула 1414346400000 = ‎26‎.‎10‎.‎2014‎ ‎23‎:‎00‎:‎00 что некорректно...
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 17:02     Что случилось с датой? #4
А с какой целью вы используете getMinimum?
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 17:06  [ТС]     Что случилось с датой? #5
я хочу обнулить эти поля...
хорошо, пусть будет так:
Java
1
2
3
4
5
6
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
тот же результат: ‎26‎.‎10‎.‎2014‎ ‎23‎:‎00‎:‎00
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 17:12     Что случилось с датой? #6
Попробуйте установить все значения полей. Начиная с года месяца и т.д.
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 17:17  [ТС]     Что случилось с датой? #7
интересно как я это должен сделать? приведите пример...
в документации написано:

java.util.Calendar.getInstance()
Constructs a new instance of the Calendar subclass appropriate for the default Locale.

Returns:
a Calendar subclass instance set to the current date and time in the default Timezone.

значит вручную не надо прописывать текущий год, месяц и т.д.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 17:19     Что случилось с датой? #8
Может и не надо. Я просто предложил. У меня везде задается год, месяц, день и т.д., ну и собственно работает.
Например:
Java
1
2
3
4
5
6
7
8
9
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz);
c.set(Calendar.YEAR, 2014);
c.set(Calendar.MONTH, 10-1);
c.set(Calendar.DAY_OF_MONTH, 27);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 17:35  [ТС]     Что случилось с датой? #9
спасибо. это всё понятно. но мне надо из инициализированного объекта
если вручную прописывать то откуда брать текущие год месяц и тд

Добавлено через 3 минуты
и ваш код вернул 26‎.‎10‎.‎2014‎ ‎23‎:‎00‎:‎00

Добавлено через 8 минут
странно что если вывести как:

Log.d("000", String.valueOf(c.getTime()));

то вернёт:
Mon Oct 27 00:00:00 GMT+05:00 2014

но в планшете прописано GMT+06:00

что-то с часовым поясом не так....
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
27.10.2014, 18:04     Что случилось с датой? #10
А не думали что это повлиял перевод времени на час назад? В андроиде то не обновилось ничего а на компе у вас время перевелось т.к. microsoft позаботились об этом. Вот и ошибка, телефон выдает верное время, но без учета перевода времени, а логкат опять же выдает верное время, но уже с учетом перевода. Как то так)
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 18:44  [ТС]     Что случилось с датой? #11
думал об этом...
но как решить данный вопрос так и не придумаю пока...
+1 час делать - не знаю - корректно ли это будет с точки зрения кодинга... а вдруг гугл пофиксит и придётся опять обновлять -1...

что делать то, господа?
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
27.10.2014, 18:50     Что случилось с датой? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Оставить как есть. Или проверять строку на нули и если нужно добавлять час.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 18:53     Что случилось с датой? #13
Чото вы не то говорите. На устройстве все будет работать как надо. Ведь там свое время. При чем тут ваш час??? Или я недокурил чего то?
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
27.10.2014, 19:01  [ТС]     Что случилось с датой? #14
да действительно на устройстве всё работает как надо...
Spelcrawler, правильно подметил про винду и разницу в 1 час
дело в том, что android-клиент передаёт дату на windows-сервер и уже тут нарисовалась эта разница во времени...
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 19:07     Что случилось с датой? #15
Значит вам надо и на сервере учитывать временную зону и корректировать
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 04:35     Что случилось с датой? #16
Цитата Сообщение от dubok79 Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz);
c.set(Calendar.YEAR, 2014);
c.set(Calendar.MONTH, 10-1);
c.set(Calendar.DAY_OF_MONTH, 27);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Вчера столкнулся с подобной проблемой, а здесь вижу "решение".
Вдруг обнаружил что при установке даты в календарь месяц не правильно ставится! На единицу сдвинут! Пока не критично - у меня месяц задается прямо в коде цифрой. Но пришлось так-же прописывать c.set(Calendar.MONTH, 10-1);
Почему так? Откуда этот глюк? Или месяц ВСЕГДА начинается с 0?
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
28.10.2014, 06:31  [ТС]     Что случилось с датой? #17
всегда
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2014, 14:57     Что случилось с датой?
Еще ссылки по теме:

Вычислить промежуток времени между текущей датой/временем и временем, введенным пользователем Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
28.10.2014, 14:57     Что случилось с датой? #18
Tester64, если точно известен месяц, можно написать так: Calendar.JANUARY. Он равен 0, но зато это более наглядно.
Yandex
Объявления
28.10.2014, 14:57     Что случилось с датой?
Ответ Создать тему
Опции темы

Текущее время: 05:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru