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

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

Войти
Регистрация
Восстановить пароль
 
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
#1

Date1 + Date2 = - Программирование Android

15.11.2016, 16:19. Просмотров 209. Ответов 10
Метки нет (Все метки)

Добрый день.
Вот код.

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 = (Программирование Android):

2*date1-date2-1 перевести из Access в Asp - C# ASP.NET
Привет. Подскажитые пожалуста, как я могу перевести 2*date1-date2-1 вираженияа. некоториые деиствия я сделал но далще ни как ни...


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

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3156 / 1958 / 218
Регистрация: 13.01.2012
Сообщений: 7,488
15.11.2016, 16:33 #2
_Night_Scream_ непонятно что вас не устраивает. значения сложились корректно и выдали верный результат так?

Добавлено через 57 секунд
6-е число это же описка? там же 16-е?
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.11.2016, 16:54  [ТС] #3
vxg, да, 16ое.
Как избавиться от timezone? На разных устройствах будет считать по разному в зависимости от часового пояса.
Записал в базу 16:11:29 и 2016-11-16
Сложил, получил 16 ноября 2016 г. 6:11:29, а надо 6 ноября 2016 г. 16:11:29 в одной переменной date.
vxg
Модератор
3156 / 1958 / 218
Регистрация: 13.01.2012
Сообщений: 7,488
15.11.2016, 17:04 #4
_Night_Scream_, храните в базе юникс время в UTC или выберите любой другой пояс к которому будут приводится все отметки
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.11.2016, 19:48  [ТС] #5
vxg, хранить в миллисекундах не хочется

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

Блин столько мороки из-за этого времени...
vxg
Модератор
3156 / 1958 / 218
Регистрация: 13.01.2012
Сообщений: 7,488
15.11.2016, 20:21 #6
_Night_Scream_, если ваше приложение работает в разных временных зонах то хранение отметки в виде unix time stamp utc и его приведение на устройствах к их временной зоне наверное единственный выход. Хотя смотря что за задача. Может локального времени пользователя достаточно?
ExFau$t
272 / 247 / 43
Регистрация: 08.05.2012
Сообщений: 1,350
15.11.2016, 20:24 #7
_Night_Scream_, попробуй через TimeStamp перевести. Там же можно и с часовым поясом поиграться.
https://developer.android.com/refere...Timestamp.html
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.11.2016, 20:33  [ТС] #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
272 / 247 / 43
Регистрация: 08.05.2012
Сообщений: 1,350
15.11.2016, 20:43 #9
Ещё могу посоветовать прогнать эти строчки сплитом и засунуть в
Java
1
Calendar calendar = Calendar.getInstance();
Выставить там дату и время и выгрузить лонг, сколько пользовался вроде всегда локальное время давало.
_Night_Scream_
75 / 74 / 8
Регистрация: 08.08.2013
Сообщений: 584
15.11.2016, 22:36  [ТС] #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
Модератор
3156 / 1958 / 218
Регистрация: 13.01.2012
Сообщений: 7,488
16.11.2016, 09:47 #11
_Night_Scream_, можно попробовать и в эту строну покопать (для примера установлена зона +3 но я думаю можно найти и дефолт зону устройства)
Java
1
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+03:00"));
Yandex
Объявления
16.11.2016, 09:47
Ответ Создать тему
Опции темы

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