Рассчитать разницу во времени между двумя днями текущей недели на Android

Я хотел бы рассчитать разницу во времени между двумя днями (например, в пятницу и субботу) той же недели. Такой расчет необходим для проверки временных ограничений моего проекта. Чтобы узнать больше об ограничении, см. приведенные ниже примеры.

Пример 1

            {
                "id": "3",
                "from_day": "Fri",
                "from_time": "16:00:00",
                "to_day": "Sat",
                "to_time": "06:00:00"
            }

Пример 2

           {
                "id": "4",
                "from_day": "Mon",
                "from_time": "04:00:00",
                "to_day": "Mon",
                "to_time": "09:00:00"
            }

В приведенном выше примере я должен проверить, проходит ли работающее приложение между точной датой и временем той же недели.

Что я уже сделал?

Я создал эту простую функцию, которая принимает день недели, например, Mon, время, например, 04:00:00, и время, например, 09:00:00. в качестве параметра и возвращается, если он находится в пределах диапазона.

public boolean getValidity(String day, String dateStart, String dateStop) {

        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        String current_day = new SimpleDateFormat("EE", Locale.ENGLISH)
                .format(date.getTime());

        if (current_day.matches(day)) {
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            format.setTimeZone(TimeZone.getTimeZone("GMT+8"));

            Date today = Calendar.getInstance().getTime();
            String datePresent = format.format(today);

            Date d1 = null;
            Date d2 = null;
            Date d3 = null;

            try {
                d1 = format.parse(dateStart);
                d2 = format.parse(dateStop);
                d3 = format.parse(datePresent);

            } catch (Exception e) {
                e.printStackTrace();
            }

            long current_time = d3.getTime();
            long start_time = d1.getTime();
            long stop_time = d2.getTime();

            if (current_time >= start_time && current_time <= stop_time) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
    // this function is used for converting the time into GMT +8 before passing as a parameter in the getValidity() function
    public String toGMT(String time){

        //first convert the received string to date
        Date date = null;

        //creating DateFormat for converting time from local timezone to GMT
        DateFormat format = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);
        try {
            date = format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //getting GMT timezone, you can get any timezone e.g. UTC
        format.setTimeZone(TimeZone.getTimeZone("GMT+8"));

        return format.format(date).toString();
    }

Но приведенный выше код не работает для первого примера, где даты разные. Было бы очень полезно, если бы кто-нибудь мог дать некоторое представление о решении проблемы.


person Purple Lotus    schedule 04.09.2015    source источник
comment
возможный дубликат.. прочитайте этот stackoverflow.com/questions/1555262/   -  person Michele Lacorte    schedule 04.09.2015


Ответы (1)


Вы можете превратить объект даты в длинный (миллисекунды с 1 января 1970 г.), а затем использовать TimeUnit для получения количества секунд:

long diffInMs = endDate.getTime() - startDate.getTime();

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);

дата окончания и дата начала как объект даты для ваших дней, которые вы можете сделать самостоятельно.

person Androider    schedule 04.09.2015
comment
Что произойдет, если я сравню субботу и воскресенье? Так как после вечера субботы начнется новая неделя, но как понять, воскресенье с текущей недели или со следующей недели? Также время указывается в формате ЧЧ:мм:сс, но без даты. - person Purple Lotus; 04.09.2015
comment
@PurpleLotus В ответе предлагается использовать первую неделю 1970 года по UTC (эпоха) как фальшивые даты для ваших расчетов. - person Basil Bourque; 04.09.2015