java—如何根据用户设备上的时间和日期将这两个值中的任何一个显示为textview?

wn9m85ua  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(239)

我正在为一家咖啡店创建一个应用程序,它应该显示有关咖啡店在给定时间内是关闭还是打开的信息。应用程序应显示“open”或“closed”作为 TextView 基于用户设备上的时间。
咖啡馆上午10:00营业,晚上24:00关门。此外,星期三至星期二开放(星期一和星期二不开放)。
为此,我创建了一个 TextView xml布局,文本字段为空:

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

在java文件中,我创建了一个 TextView 元素并引用 TextView 中的布局 XML 文件:

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

我还通过以下方式从用户设备获取日期和时间:

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

从这里我不知道如何做最后的任务,显示“打开”或“关闭”在 TextView 根据用户设备上的日期、时间和日期进行布局。我所能做的就是只显示当前的日期和时间 TextView 使用代码进行布局:

textView.setText(currentDateTimeString);

注意:如果您共享任何代码,请添加注解来描述每一行代码,因为我是初学者。

xqkwcwgp

xqkwcwgp1#

Java8引入了 java.time.* 最好的套餐!您可以在JavaSE8日期和时间中找到更多信息
你应该考虑使用 java.time.LocalDateTime .
下面的函数提供了一个简单的示例来确定您的店铺是否已打开:

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;
}

然后你可以使用 isOpen() 比如:

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

文档
stackoverflow:java:getminutes和gethours

2ledvvac

2ledvvac2#

您可以设置if…else条件来设置textview。
我认为这是一个有帮助的例子。

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

第一个if语句(if((currenttime>opentime)&&(currenttime<closetime)),确保只有currenttime变量在1000小时到2400小时之间时,该语句才返回true。
第二个if语句(if((currentday!=星期一)&(当前日期!=daytesday(星期二)),确保仅当当前日期不是星期一或星期二时才返回true。
而且,currentdatetimestring同时给出date和当前时间。所以您必须根据currentday和currenttime解析它,或者从calendar类文档中找到合适的常量。
祝你好运。希望有帮助

wgx48brx

wgx48brx3#

我用java编译器编写了您的解决方案,但是逻辑仍然适用于android,只需实现函数checkifclosed()、getday()和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);
    }

}

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);
    }
}

相关问题