首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TextView 依時間區間顯示不同問候語實作

     編輯:程式設計綜合問答

根據當前時間顯示「早安」、「午安」、「晚安」等問候語,核心邏輯為取得當前小時/分鐘,與預設時間區間比對。注意時區處理與跨日邊界(如 23:00-05:00 為深夜)。

標準實作(Java)


public class GreetingHelper {
    public static String getGreeting() {
        Calendar cal = Calendar.getInstance(); // 使用者裝置本地時間
        int hour = cal.get(Calendar.HOUR_OF_DAY); // 0-23
        int minute = cal.get(Calendar.MINUTE);
        int timeInMinutes = hour * 60 + minute; // 0-1439
        
        if (timeInMinutes >= 5*60+0 && timeInMinutes < 11*60+0) { // 05:00-10:59
            return "早安";
        } else if (timeInMinutes >= 11*60+0 && timeInMinutes < 14*60+0) { // 11:00-13:59
            return "午安";
        } else if (timeInMinutes >= 14*60+0 && timeInMinutes < 18*60+0) { // 14:00-17:59
            return "下午好";
        } else if (timeInMinutes >= 18*60+0 && timeInMinutes < 22*60+0) { // 18:00-21:59
            return "晚安";
        } else { // 22:00-04:59
            return "夜深了,早點休息";
        }
    }
}

// 使用
TextView tv = findViewById(R.id.greetingText);
tv.setText(GreetingHelper.getGreeting());

進階:可配置時間區間(資料驅動)


@Data
class TimeGreeting {
    int startHour, startMinute;
    int endHour, endMinute;
    String text;
}

// 配置列表(可從 JSON/資料庫載入)
List<TimeGreeting> greetings = Arrays.asList(
    new TimeGreeting(5, 0, 11, 0, "早安"),
    new TimeGreeting(11, 0, 14, 0, "午安"),
    new TimeGreeting(14, 0, 18, 0, "下午好"),
    new TimeGreeting(18, 0, 22, 0, "晚安"),
    new TimeGreeting(22, 0, 5, 0, "夜深了") // 跨日
);

public String getGreetingDynamic() {
    Calendar now = Calendar.getInstance();
    int curr = now.get(Calendar.HOUR_OF_DAY) * 60 + now.get(Calendar.MINUTE);
    
    for (TimeGreeting g : greetings) {
        int start = g.startHour * 60 + g.startMinute;
        int end = g.endHour * 60 + g.endMinute;
        if (start < end) { // 同一天區間
            if (curr >= start && curr < end) return g.text;
        } else { // 跨日區間(如 22:00-05:00)
            if (curr >= start || curr < end) return g.text;
        }
    }
    return "你好"; // 預設
}

Kotlin 簡潔寫法


fun getGreeting(): String {
    val hour = LocalTime.now().hour
    return when (hour) {
        in 5..10 -> "早安"
        in 11..13 -> "午安"
        in 14..17 -> "下午好"
        in 18..21 -> "晚安"
        else -> "夜深了,早點休息"
    }
}

定時自動更新(若需即時切換)


// 計算下一個時間邊界,設定定時器
Handler handler = new Handler(Looper.getMainLooper());
Runnable updater = new Runnable() {
    @Override
    public void run() {
        tv.setText(getGreeting());
        scheduleNextUpdate(); // 重新計算下一邊界延遲
    }
};

void scheduleNextUpdate() {
    // 簡易版:每分鐘檢查一次
    handler.postDelayed(updater, 60_000);
}

// 生命週期管理
@Override
protected void onResume() { super.onResume(); scheduleNextUpdate(); }
@Override
protected void onPause() { super.onPause(); handler.removeCallbacks(updater); }

時區與本地化注意事項

  • Calendar.getInstance() 回傳裝置本地時間,適合顯示給使用者。
  • 伺服器端邏輯請用 ZonedDateTime.now(ZoneId.of("Asia/Taipei")) 明確指定時區。
  • 多語系 App 需將問候語字串放入 strings.xml 並配合 getString() 取得。

將時間邏輯封裝為可配置、可測試的工具類,即能輕鬆實現動態問候並支援未來擴充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved