Как сложить и вычесть часы и минуты - PullRequest
1 голос
/ 21 мая 2019

У меня есть некоторые проблемы. Я начинающий программист. Мне нужно создать приложение как часы с Android Studio, и мне нужно сложить и вычесть часы и минуты. Когда я нажимаю + 1H, нужно будет добавить 1H, чтобы взять то же самое с + 1M и -1M, и я не могу скоординировать, как я могу это сделать. Я делаю так, чтобы, когда часы снова достигли 23:59, было 00:00 и так циклически

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private Button button,button2,button3,button4;
    private TextView textView;
    int hour = 0;
    int minute = 0;
    int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button);
        button2 = findViewById(R.id.button2);
        button3 = findViewById(R.id.button3);
        button4 = findViewById(R.id.button4);
        textView = findViewById(R.id.res);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                    if (hour >= 9) {
                        textView.setText((++hour + "") + ":" + "00");
                    } else {
                        textView.setText("0" + (++hour + "") + ":" + "00");
                    }

            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(hour>=9) {
                    textView.setText((--hour + "") + ":" + "00");
                }else{
                    textView.setText("0"+(--hour + "") + ":" + "00");
                }
            }
        });
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(minute>=9) {
                    textView.setText("00" + ":" + (++minute + ""));
                }else{
                    textView.setText("00" + ":" + "0"+(++minute + ""));
                }
            }
        });
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(minute>=9) {
                    textView.setText("00" + ":" + (--minute + ""));
                }else{
                    textView.setText("00" + ":" + "0"+(--minute + ""));
                }
            }
        });
    }
}

Ответы [ 3 ]

1 голос
/ 22 мая 2019

java.time и ThreeTenABP

Все эти функции уже существуют.Используйте LocalTime из java.time, современного Java-API даты и времени.Вот короткая демонстрация с выводом, приведенным в комментариях:

    LocalTime time = LocalTime.of(23, 59);
    System.out.println(time); // 23:59
    time = time.minusHours(1);
    System.out.println(time); // 22:59
    time = time.minusMinutes(1);
    System.out.println(time); // 22:58
    time = time.plusHours(1);
    System.out.println(time); // 23:58
    time = time.plusMinutes(1);
    System.out.println(time); // 23:59
    time = time.plusHours(1);
    System.out.println(time); // 00:59
    time = time.plusMinutes(1);
    System.out.println(time); // 01:00

Вопрос: Могу ли я использовать java.time на Android?

Да, java.time прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) современный встроенный API.
  • В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 21 мая 2019

Для этого используйте Calendar#add.Смущает, что вы можете использовать его как для сложения, так и для вычитания.

final Calendar calendar = Calendar.getInstance(); //A calendar set to the current time
calendar.add(Calendar.HOUR_OF_DAY, 1); //Add one hour
calendar.add(Calendar.HOUR_OF_DAY, -1); //Subtract one hour

Когда дело доходит до времени печати, по умолчанию в версиях API <24 используется значение <a href="https://developer.android.com/reference/java/text/SimpleDateFormat" rel="nofollow noreferrer">DateFormat.Итак, вместо того, чтобы пытаться определить это самостоятельно:

final SimpleDateFormat format = new SimpleDateFormat("HH:mm"); //hours and minutes, 24hr clock
textView.setText(format.format(calendar.getTime());

Однако, обратите внимание, что есть проблемы с SimpleDateFormat, особенно когда речь идет о многопоточности.Как предложил Оле В.В. в комментариях, вам следует рассмотреть возможность использования библиотеки ThreeTenABP.

Если вы ориентируетесь на API 24+, вы можете использовать дополнения Java 8вокруг времени в пакете java.time, например Instant и DateTimeFormatter

0 голосов
/ 21 мая 2019

Может быть, этот код поможет вам получить время и правильно его увеличить или уменьшить.

Calendar calendar = Calendar.getInstance();
calendar.setTime(yourdate);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
int seconds = calendar.get(Calendar.SECOND);
b.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e){
        if(hours>=9)
        {
            hours=hours+1;
            textView.setText(hours+":"+minutes+":"+seconds);
        }
        else
        {
            textView.setText(hours+":"+minutes+":"+seconds);
        }
    }
});
b1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        if(hours>=9)
        {
            hours=hours-1;
            textView.setText(hours+":"+minutes+":"+seconds);
        }
        else
        {
            textView.setText(hours+":"+minutes+":"+seconds);
        }
    }
});
b2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        if(minutes>=9)
        {
            minutes=minutes+1;
            textView.setText(hours+":"+minutes+":"+seconds);
        }
        else
        {
            textView.setText(hours+":"+minutes+":"+seconds);
        }
    }
});
b3.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        if(minutes>=9)
        {
            minutes=mminutes-1;
            textView.setText(hours+":"+minutes+":"+seconds);
        }
        else
        {
            textView.setText(hours+":"+minutes+":"+seconds);
        }
    }
});
...