Расчет истекшего времени? - PullRequest
       0

Расчет истекшего времени?

0 голосов
/ 28 октября 2018

Интересно, как добиться чего-то подобного:

В упражнении B пользователь что-то наберет и вернется к действию A. В занятии A оно отобразит несколько секунд назад .Если статус час назад, он будет отображаться час назад.

Как добиться?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Ниже приведен рабочий код без использования java.time.LocalDateTime Вы можете внести необходимые изменения, если хотите использовать это

Вы можете использовать общие настройки, чтобы сэкономить времяв действии A.

Для экономии времени:

SharedPreferences preferences = null;
preferences = act.getSharedPreferences("your_name", Activity.MODE_PRIVATE);
preferences.edit().putString("TIME", getCurrentTimeDate())
.commit();

Используйте это, чтобы получить время:

private String getCurrentTimeDate() {

    Calendar calendar = new GregorianCalendar();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

    return formatter.format(calendar.getTime());
}

Теперь есть 2 решения:

  1. Установите таймер в качестве службы, и он будет работать в фоновом режиме и обновлять время

  2. Извлекайте данные из SharedPreferences и вычисляйте разницу каждый раз, когда хотите отобразить значение.

Выберите параметр в соответствии с количеством раз, которое вы хотите отобразить эти данные

Чтобы вычислить разницу в активности B:

    Calendar calendar = new GregorianCalendar();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

    SharedPreferences shared = getSharedPreferences("your_name", MODE_PRIVATE);
    String saved_time = (shared.getString("TIME", ""));

    Date date = null,date2 = null;
    try {
        date = formatter.parse(saved_time);
    } catch (ParseException e) {
        e.printStackTrace();
    }


    String currentTime = getCurrentTimeDate();
    try {
        date2 = formatter.parse(currentTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    printDifference(date,date2);

Методы: Используйте тот же самый getCurrentTimeDate, указанный выше, в этом упражнении тоже

public void printDifference(Date startDate, Date endDate){

    //milliseconds
    long different = endDate.getTime() - startDate.getTime();

    System.out.println("startDate : " + startDate);
    System.out.println("endDate : "+ endDate);
    System.out.println("different : " + different);

    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long daysInMilli = hoursInMilli * 24;

    //long elapsedDays = different / daysInMilli;
    //different = different % daysInMilli;

    long elapsedHours = different / hoursInMilli;
    different = different % hoursInMilli;

    long elapsedMinutes = different / minutesInMilli;
    different = different % minutesInMilli;

    long elapsedSeconds = different / secondsInMilli;

    System.out.printf(
            "%d hours, %d minutes, %d seconds%n",
            elapsedHours, elapsedMinutes, elapsedSeconds);

}
0 голосов
/ 28 октября 2018

Вы могли бы сделать что-то вроде этого

 long startTime
 long duration

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    startTime = SystemClock.uptimeMillis();
} 




 @Override
public void onBackPressed() {
    duartion = SystemClock.uptimeMillis() - startTime;
    //Duration you get in MS
    once you are done call 
    super.onBackPressed();//finish the activity

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...