Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
FailureHardd
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 8
1

Парсер дат и использование их в таймерах

10.02.2018, 08:33. Просмотров 229. Ответов 7

Имеется данный код c таймером
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void countDownStart() {
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                handler.postDelayed(this, 1000);
                try {
                    SimpleDateFormat dateFormat = new SimpleDateFormat(
                            "yyyy-MM-dd-hh-mm-ss");
 
                    Date futureDate = dateFormat.parse("2017-03-01-20-00-00");
                    Date currentDate = new Date();
                    if (!currentDate.after(futureDate)) {
                        long diff = futureDate.getTime()
                                - currentDate.getTime();
                        long days = diff / (24 * 60 * 60 * 1000);
                        diff -= days * (24 * 60 * 60 * 1000);
                        long hours = diff / (60 * 60 * 1000);
                        diff -= hours * (60 * 60 * 1000);
                        long minutes = diff / (60 * 1000);
                        diff -= minutes * (60 * 1000);
                        long seconds = diff / 1000;
                        txtTimerDay.setText("" + String.format("%02d", days));
                        txtTimerHour.setText("" + String.format("%02d", hours));
                        txtTimerMinute.setText(""
                                + String.format("%02d", minutes));
                        txtTimerSecond.setText(""
                                + String.format("%02d", seconds));
                    } else {
                        tvEvent.setVisibility(View.VISIBLE);
                        tvEvent.setText("Start event now!");
 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        handler.postDelayed(runnable, 1 * 1000);
    }
 
 
}
В корневом каталоге будет лежать документ с датами
Даты могу распарсить
Вопрос в следующем:
Как подсунуть даты таймеру?
Буду благодарен если ответите готовым кодом(могу вознаградить рублем(если это не запрещено))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2018, 08:33
Ответы с готовыми решениями:

Ошибка в таймерах
Приветствую. Выручайте, уже сломал голову. Суть задачи в том, что я пишу таймеры обратного отсчета,...

Динамическая индикация, захлебнулся в таймерах.
Есть stm32f4Dyscovery, есть блок газоразрядных индикаторов, подключенных к одному дешифратору...

Существуют ли библиотеки задержек на таймерах?
Доброе время суток. Выводил тут на ЖК инфу с АВРки и понял, что так жить не хорошо. Дело в том,...

Парсер на Node.js, использование полученных данных
Здравствуйте, подскажите, пожалуйста, как использовать данные полученные XML парсером, написанном...

Обработка строк, использование процедур и функций преобразования дат и времени
Приветствую. Помогите, пожалуйста, решить данную задачу: Дан список сотрудников, содержащий...

7
+1
321 / 154 / 53
Регистрация: 24.08.2010
Сообщений: 1,026
10.02.2018, 09:37 2
Так объяви переменные days, hours и т.д. в начале кода и подсовывай сколько хочешь.
Или я что-то не так понял?
0
ExFau$t
568 / 512 / 115
Регистрация: 08.05.2012
Сообщений: 2,548
10.02.2018, 10:06 3
Проще всего конвертнуть дату в long.
0
FailureHardd
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 8
10.02.2018, 11:10  [ТС] 4
А по подробнее?
Если не сложно
0
ExFau$t
568 / 512 / 115
Регистрация: 08.05.2012
Сообщений: 2,548
10.02.2018, 12:08 5
Ну, например, класс Date, используемый здесь, имеет метод getTime().
0
FailureHardd
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 8
10.02.2018, 17:00  [ТС] 6
Ну вроде разобрался)Спасибо
Тогда можно еще один вопрос
Для парсинга json файлов обычно используется метод InputStream inputStream = getAssets().open("name.json");
При этом json файл должен находиться в директории assets
А как его "достать" из других директорий?
метод getExternalStorageDirectory() не работает
0
ExFau$t
568 / 512 / 115
Регистрация: 08.05.2012
Сообщений: 2,548
10.02.2018, 18:28 7
Цитата Сообщение от FailureHardd Посмотреть сообщение
не работает
Что не работает, какая ошибка, разрешения выданы?
0
FailureHardd
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 8
17.02.2018, 11:01  [ТС] 8
Незнаю, может в лс не увидел, попробую еще раз тут)
вот я распарсил документ
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
File yourFile = new File(Environment.getExternalStorageDirectory(), "/Android/data/"пути до директории моего приложения/date.txt");
            FileInputStream stream = new FileInputStream(yourFile);
            String jsonStr = null;
            try {
                FileChannel fc = stream.getChannel();
                MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
 
                jsonStr = Charset.defaultCharset().decode(bb).toString();
            }
            catch(Exception e){
                e.printStackTrace();
            }
            finally {
                stream.close();
            }
/*  String jsonStr = "{\n\"data\": [\n    {\n        \"id\": \"1\",\n        \"title\": \"Farhan Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"2\",\n        \"title\": \"Noman Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"3\",\n        \"title\": \"Ahmad Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"4\",\n        \"title\": \"Mohsin Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"5\",\n        \"title\": \"Haris Shah\",\n        \"duration\": 10\n    }\n  ]\n\n}\n";
  */
            JSONObject jsonObj = new JSONObject(jsonStr);
 
            // Getting data JSON Array nodes
            JSONArray data  = jsonObj.getJSONArray("data");
 
            // looping through All nodes
            for (int i = 0; i < data.length(); i++) {
                JSONObject c = data.getJSONObject(i);
 
                String id = c.getString("id");
                String year = c.getString("year");
                String month = c.getString("month");
                String days = c.getString("days");
                String hours = c.getString("hours");
                String minute = c.getString("minute");
                String second = c.getString("second");
                //use >  int id = c.getInt("duration"); if you want get an int
 
 
                // tmp hashmap for single node
                HashMap<String, String> parsedData = new HashMap<String, String>();
 
                // adding each child node to HashMap key => value
                parsedData.put("id", id);
                parsedData.put("year", year);
                parsedData.put("month", month);
                parsedData.put("days", days);
                parsedData.put("hours", hours);
                parsedData.put("minute", minute);
                parsedData.put("second", second);
 
 
 
                // do what do you want on your interface
            }
 
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
В логах посмотрел, действительно парсер все правильно прочитал

Таймер переписал и теперь он узнает дату через переменную
Java
1
2
private String EVENT_DATE_TIME;
          private String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
Java
1
2
3
4
5
6
7
8
9
private void countDownStart() {
        runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    handler.postDelayed(this, 1000);
                    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
                    Date event_date = dateFormat.parse(EVENT_DATE_TIME);
                    Date current_date = new Date();
Вопрос в следующем, как теперь правильно достать данные из парсера?
Объявить через глобальную переменную?
Как это правильнее сделать?[/QUOTE]
0
17.02.2018, 11:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2018, 11:01

Поиск в файлах строк и дальнейшее использование найденных строк и имён и дат изменения содержащих их файлов
Дан каталог, нужно в нём и во всех его подкаталогах найти файлы *.log, содержащие текст в любой...

Сравнение двух дат и вывод дат находящихся между ними
Здравствуйте! Тут такое дело, вводятся две определенные ДАТЫ в Edit1 и Edit2 в формате...

Поиск дат в периоде дат (целиком или частично)
Добрый день! У Меня есть проблема, не могу подобрать формулу по поиску определенного периода даты...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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