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

Date1 + Date2 = - Android

Восстановить пароль Регистрация
 
_Night_Scream_
51 / 51 / 6
Регистрация: 08.08.2013
Сообщений: 485
15.11.2016, 16:19     Date1 + Date2 = #1
Добрый день.
Вот код.

Java
1
2
3
4
5
6
7
8
9
10
DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd")
 
String _time = request.getString("16:11:29");//millis 40289000 = 1 января 1970 г. [B]11:11:29[/B] UTC
String _date = request.getString("2016-11-16");//millis 1479236400000 =[B] 15[/B] ноября 2016 г. [B]19:00:00[/B] UTC
 
Dtime = timeFormat.parse(_time);
Ddate = dateFormat.parse(_date);
 
Date dateMills = new Date(Dtime.getTime() + Ddate.getTime());//1479276689000 16 ноября 2016 г. [B]6:11:29[/B] UTC
Получается 2016-11-16 + 16:11:29 = 6 ноября 2016 г. 6:11:29

Мне в achartengine надо Date отправлять, так вот он не правильно выводит из-за этого график.

Как побороть timezone?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2016, 16:19     Date1 + Date2 =
Посмотрите здесь:

2*date1-date2-1 перевести из Access в Asp C# ASP.NET

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,281
15.11.2016, 16:33     Date1 + Date2 = #2
_Night_Scream_ непонятно что вас не устраивает. значения сложились корректно и выдали верный результат так?

Добавлено через 57 секунд
6-е число это же описка? там же 16-е?
_Night_Scream_
51 / 51 / 6
Регистрация: 08.08.2013
Сообщений: 485
15.11.2016, 16:54  [ТС]     Date1 + Date2 = #3
vxg, да, 16ое.
Как избавиться от timezone? На разных устройствах будет считать по разному в зависимости от часового пояса.
Записал в базу 16:11:29 и 2016-11-16
Сложил, получил 16 ноября 2016 г. 6:11:29, а надо 6 ноября 2016 г. 16:11:29 в одной переменной date.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,281
15.11.2016, 17:04     Date1 + Date2 = #4
_Night_Scream_, храните в базе юникс время в UTC или выберите любой другой пояс к которому будут приводится все отметки
_Night_Scream_
51 / 51 / 6
Регистрация: 08.08.2013
Сообщений: 485
15.11.2016, 19:48  [ТС]     Date1 + Date2 = #5
vxg, хранить в миллисекундах не хочется

а что значит?
Цитата Сообщение от vxg Посмотреть сообщение
или выберите любой другой пояс к которому будут приводится все
не понял.

Блин столько мороки из-за этого времени...
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,281
15.11.2016, 20:21     Date1 + Date2 = #6
_Night_Scream_, если ваше приложение работает в разных временных зонах то хранение отметки в виде unix time stamp utc и его приведение на устройствах к их временной зоне наверное единственный выход. Хотя смотря что за задача. Может локального времени пользователя достаточно?
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
15.11.2016, 20:24     Date1 + Date2 = #7
_Night_Scream_, попробуй через TimeStamp перевести. Там же можно и с часовым поясом поиграться.
https://developer.android.com/refere...Timestamp.html
_Night_Scream_
51 / 51 / 6
Регистрация: 08.08.2013
Сообщений: 485
15.11.2016, 20:33  [ТС]     Date1 + Date2 = #8
vxg, время нужно только локальное, то, что у пользователя на устройстве.

По событию (кнопка например) я пишу цифру,время и дату в sqLite базу, и так каждое нажатие.
Потом накопив данных я их хочу выгрузить в график.
У меня в БД есть TIME и DATE (разные столбцы).

График понимает Date, поэтому я и создаю Date из двух столбцов сложив дату со временем, но тут вмешивается часовая зона.

Сохранив 14:00 как TIME
Сохранив 15.11.2016 как DATE

Потом сложив их я ожидаю 15.11.2016 14:00 , но никак не 9:00 или 19:00 из-за этого график показывает не правильно X ось.
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
15.11.2016, 20:43     Date1 + Date2 = #9
Ещё могу посоветовать прогнать эти строчки сплитом и засунуть в
Java
1
Calendar calendar = Calendar.getInstance();
Выставить там дату и время и выгрузить лонг, сколько пользовался вроде всегда локальное время давало.
_Night_Scream_
51 / 51 / 6
Регистрация: 08.08.2013
Сообщений: 485
15.11.2016, 22:36  [ТС]     Date1 + Date2 = #10
ExFau$t, тоесть обойти SimpleDateFormat?
Попробую.

---

Вот только график ждёт от меня всё равно java.util.Date

Добавлено через 1 час 49 минут
Такс... активировал профиль костылизации и ленивости чтения доков и написал такое

Java
1
2
3
4
5
6
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
 
calendar.setTime(sdf.parse(_date + " " + _time));
 
Date date = new Date(calendar.getTimeInMillis());//this work
График с этим date начал выводиться нормально на любой тайм зоне без переделки структуры sqLite.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,281
16.11.2016, 09:47     Date1 + Date2 = #11
_Night_Scream_, можно попробовать и в эту строну покопать (для примера установлена зона +3 но я думаю можно найти и дефолт зону устройства)
Java
1
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+03:00"));
Yandex
Объявления
16.11.2016, 09:47     Date1 + Date2 =
Ответ Создать тему
Опции темы

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