Сложить время двух таймеров
Ребята кто может подсказать куда смотреть или где почитать. Как мне сложить время. У нас есть таймер он работает, мы его останавливаем и сохраняем его значение(время которое он проработал).Запускаем снова таймер , он опять работает , останавливаем, и нужно прибавить текущее время таймера к тому времени которые мы сохранили до этого.
public class MainActivity extends AppCompatActivity {
private TextView textViewTimer;
private TextView textViewTotalTime;
private boolean isTimerWorking = false;
private int sec = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewTimer = findViewById(R.id.tvTimer);
textViewTotalTime = findViewById(R.id.tvTotalTime);
run();
}
public void onClickStartTimer(View view) {
isTimerWorking = true;
}
public void onClickStopTimer(View view) {
isTimerWorking = false;
}
public void onClickResetTime(View view) {
isTimerWorking = false;
sec = 0;
}
public void onClickSaveTime(View view) {
try {
//Берем время основного таймера
String timerTime = String.valueOf(textViewTimer.getText());
String[] strHourMinSec = timerTime.split(":");
int[] numHourMinSec = new int[3];
int hCur = numHourMinSec[0] = Integer.parseInt(strHourMinSec[0]);
int mCur = numHourMinSec[1] = Integer.parseInt(strHourMinSec[1]);
int sCur = numHourMinSec[2] = Integer.parseInt(strHourMinSec[2]);
//Заносим часы минуты секунды основного таймера в переменную LocalTime
LocalTime totalT = LocalTime.of(hCur, mCur, sCur);
//извлекаем время из основного таймера и заносим в общий
textViewTotalTime.setText(totalT.toString());
String totalTime = String.valueOf(textViewTotalTime.getText());
String[] strTotalHourMinSec = totalTime.split(":");
int[] numTotalHourMinSec = new int[3];
int hTot = numTotalHourMinSec[0] = Integer.parseInt(strTotalHourMinSec[0]);
int mTot = numTotalHourMinSec[1] = Integer.parseInt(strTotalHourMinSec[1]);
int sTot = numTotalHourMinSec[2] = Integer.parseInt(strTotalHourMinSec[2]);
//Добавляем часы минуты секунды в новую переменную LocalTime
LocalTime allTime = LocalTime.of(hTot, mTot, sTot);
//Плюсуем время текущего таймера к общему
allTime.plusHours(hCur);
allTime.plusMinutes(mCur);
allTime.plusSeconds(sCur);
textViewTotalTime.setText(allTime.toString());
}catch (ArrayIndexOutOfBoundsException e){
}
}
public void run() {
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
int hours = sec / 3600;
int minutes = (sec % 3600) / 60;
int secon = sec % 60;
String time = String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, secon);
textViewTimer.setText(time);
if (isTimerWorking) {
sec++;
}
handler.postDelayed(this, 1);
}
});
}
}
Ответы (2 шт):
Я бы предложил стринг времени в виджете переводить в date:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
String dateInString = "7-Jun-2013";
Date date = formatter.parse(dateInString);
и дальше у вас будет две даты:
Date d1 = ...
Date d2 = ...
long sum = d1.getTime() + d2.getTime();
Date sumDate = new Date(sum);
по итогу вы получаете третью дату которая равна сумме. Вот как конвертировать стринг в дату и суммировать.
Опять решение пришло на свежую голову с утра.)) Почитал про LocalTime и решил сделать через него, добавил в шапку кода переменную общего времени LocalTime time = LocalTime.of(0, 0, 0); и уже в обработчике кнопки плюсую к ней время текущего таймера, вроде работает ))
public void onClickSaveTime(View view) {
try {
//Берем время текущего таймера
String strCurrentTimer = textViewTimer.getText().toString();
//разбиваем на массив и заносим в переменные
String[] strCurrentTimerArr = strCurrentTimer.split(":");
int[] numCurrentTimerArr = new int[3];
numCurrentTimerArr[0] = Integer.parseInt(strCurrentTimerArr[0]);
numCurrentTimerArr[1] = Integer.parseInt(strCurrentTimerArr[1]);
numCurrentTimerArr[2] = Integer.parseInt(strCurrentTimerArr[2]);
int cHour = numCurrentTimerArr[0];
int cMin = numCurrentTimerArr[1];
int cSec = numCurrentTimerArr[2];
// создаем LocalTime и сохраняем знаечния текущего таймера часы минуты секунды
LocalTime timeCurTimer = LocalTime.of(cHour, cMin, cSec);
//плюсуем к LocalTime текущее время
//LocalTime time - создан в шапке
time = time.plusHours(timeCurTimer.getHour());
time = time.plusMinutes(timeCurTimer.getMinute());
time = time.plusSeconds(timeCurTimer.getSecond());
textViewTotalTime.setText(time.toString());
} catch (ArrayIndexOutOfBoundsException e) {
}
sec = 0;
}
Наверняка есть решение по проще , кто знает плз подскажите. Всем спасибо