Saya membuat aplikasi untuk kedai kopi yang seharusnya menampilkan informasi tentang apakah kedai kopi itu tutup atau buka dalam waktu tertentu. Aplikasi harus menampilkan "BUKA" atau "TUTUP" sebagai TextView berdasarkan waktu di perangkat pengguna.

Kedai kopi buka mulai pukul 10:00:00 pagi dan tutup pukul 24:00:00 malam. Juga, buka dari RABU-MINGGU (SEN dan SEL tutup).

Untuk itu, saya membuat tata letak TextView dalam XML dengan bidang teks kosong:

<TextView
    android:id="@+id/status_text_view"
    android:text=""
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Dalam file Java saya membuat elemen TextView dan merujuk ke tata letak TextView di file XML:

TextView textView = (TextView) findViewById(R.id.status_text_view);

Saya juga mengambil tanggal dan waktu dari perangkat pengguna dengan menggunakan:

String currentDateTimeString = java.text.DateFormat.getDateTimeInstance().format(new Date());

Dari sini saya tidak tahu bagaimana melakukan tugas terakhir untuk menampilkan "BUKA" atau "TERTUTUP" dalam tata letak TextView berdasarkan tanggal, waktu, dan hari di perangkat pengguna. Yang bisa saya lakukan hanyalah menampilkan tanggal dan waktu saat ini di tata letak TextView dengan menggunakan kode:

textView.setText(currentDateTimeString);

Catatan: Jika Anda membagikan kode apa pun, silakan tambahkan komentar yang menjelaskan setiap baris kode karena saya seorang programmer tingkat pemula.

1
Pro 3 Januari 2021, 19:07

3 jawaban

Jawaban Terbaik

Java 8 memperkenalkan paket java.time.* yang harus diutamakan! Anda dapat menemukan informasi lebih lanjut di Tanggal dan Waktu Java SE 8

Anda harus mempertimbangkan untuk menggunakan java.time.LocalDateTime.

Fungsi berikut memberikan contoh sederhana untuk memutuskan apakah toko Anda buka:

import java.time.DayOfWeek;
import java.time.LocalDateTime;

boolean isOpen() {
   LocalDateTime now = LocalDateTime.now();

   // now.getHour/( returns the hour-of-day, from 0 to 23
   // so every hour that is greater equals 10 means open
   boolean isOpenByTime = now.getHour() >= 10;

   DayOfWeek dayOfWeek = now.getDayOfWeek();
   boolean isOpenByWeekDay = dayOfWeek != DayOfWeek.MONDAY && dayOfWeek != DayOfWeek.TUESDAY;

   return isOpenByTime && isOpenByWeekDay;
}

Anda kemudian dapat menggunakan isOpen() seperti:

if(isOpen()) { textView.setText("OPEN"); } else { textView.setText("CLOSED"); }

Dokumentasi

0
ChristianB 3 Januari 2021, 19:09

Anda dapat membuat kondisi if...else untuk menyetel TextView tersebut.

Ini adalah contoh yang saya pikir akan membantu.

if((currentTime > openTime) && (currentTime < closeTime)) {     
   if((currentDay != dayMonday) && (currentDay != dayTuesday)) {
      textView.setText("OPEN");
   }
} else {
   textView.setText("CLOSED");
}

Pernyataan IF pertama (if((currentTime > openTime) && (currentTime < closeTime))) untuk memastikan pernyataan hanya mengembalikan TRUE jika variabel currentTime antara 1000hrs hingga 2400hrs.

Pernyataan IF kedua (if((currentDay != dayMonday) && (currentDay != dayTuesday))) adalah untuk memastikan itu mengembalikan TRUE hanya jika currentDay BUKAN SENIN atau SELASA.

Dan, currentDateTimeString Anda memberikan Tanggal & Waktu saat ini bersama-sama. Jadi, Anda harus menguraikannya menurut currentDay dan currentTime atau menemukan konstanta yang sesuai dari kelas Kalender dokumentasi.

Semoga berhasil. Semoga membantu

0
karunanj 3 Januari 2021, 16:42

Saya menulis solusi Anda di JAVA Compiler, tetapi logika akan tetap berfungsi untuk Android Cukup Terapkan fungsi checkIfClosed(), getDay() dan currentTime().

import java.util.*;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;

public class checkIfclosed {

    public static void main(String[] args) throws IOException {

        try {
            System.out.println(checkIfClosed());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static String checkIfClosed() throws ParseException {
        String out = "";
        if(!(getDay().equals("MONDAY") || getDay().equals("TUESDAY"))){

            SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
            if(dateFormat.parse(currentTime()).after(dateFormat.parse("10:00:00")) 
            && dateFormat.parse(currentTime()).before(dateFormat.parse("24:00:00"))){
                out = "OPEN";
            }
            else{
                out = "CLOSED";
            }
        }
        else{
            out = "CLOSED";
        }

        return out;
    }


    private static String getDay(){
        String ox = "";
        LocalDate localDate = LocalDate.now();
        DayOfWeek dayOfWeek = DayOfWeek.from(localDate);
        ox = dayOfWeek.name();
        return ox;
    }

    private static String currentTime(){
        LocalDateTime now = LocalDateTime.now();  
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
        return dtf.format(now);
    }
    
}

Kode Android

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MainActivity extends AppCompatActivity {

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

        try {
            Log.v("isClosed", checkIfClosed());
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }


    private static String checkIfClosed() throws ParseException {
        String out = "";
        if(!(getDay().equals("MONDAY") || getDay().equals("TUESDAY"))){

            SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
            if(dateFormat.parse(currentTime()).after(dateFormat.parse("10:00:00"))
                    && dateFormat.parse(currentTime()).before(dateFormat.parse("24:00:00"))){
                out = "OPEN";
            }
            else{
                out = "CLOSED";
            }
        }
        else{
            out = "CLOSED";
        }

        return out;
    }


    private static String getDay(){
        String ox = "";
        LocalDate localDate = LocalDate.now();
        DayOfWeek dayOfWeek = DayOfWeek.from(localDate);
        ox = dayOfWeek.name();
        return ox;
    }

    private static String currentTime(){
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
        return dtf.format(now);
    }
}
0
koshur 3 Januari 2021, 17:50