微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何根据用户设备上的时间和日期将两个值中的任何一个显示为 TextView?

我正在为一家咖啡店创建一个应用程序,该应用程序应显示有关它在给定时间内是关闭还是打开的信息。应用应根据用户设备上的时间将“OPEN”或“CLOSED”显示TextView

咖啡店早上10:00:00开始营业,晚上24:00:00关门。此外,它从周三至周日开放(周一和周二关闭)。

为此,我在 XML 中创建了一个带有空文本字段的 TextView 布局:

<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 布局中显示“OPEN”或“CLOSED”的最终任务。我能做的只是使用代码TextView 布局中显示当前日期和时间:

textView.setText(currentDateTimeString);

注意:如果您共享任何代码,请添加描述每一行代码的注释,因为我是初级程序员。

解决方法

您可以创建一个 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

第二个 IF 语句 (if((currentDay != dayMonday) && (currentDay != dayTuesday))) 是为了确保仅当 currentDay 不是 MONDAY 或 TUESDAY 时它才返回 TRUE。

并且,您的 currentDateTimeString 将日期和当前时间一起提供。所以你必须根据 currentDay 和 currentTime 解析它或者从 Calendar class documentation 中找到合适的常量。

祝你好运。希望有帮助

,

Java 8 引入了应该首选的 java.time.* 包!您可以在 Java SE 8 Date and Time

中找到更多信息

您应该考虑使用 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"); }

文档

,

我在 JAVA Compiler 中编写了您的解决方案,但逻辑仍然适用于 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);
    }
    
}

安卓代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。