Java / Python / PHP / Golang / Swift / Ruby 如何判断周六和周日周末
判断是否为周末看似简单,易错点在于各语言/库对“星期”的数字编码不同。请先确认所用 API 的编码,再实现判断逻辑。
对比表(星期编码)
| 语言/库 | 常用 API | 周六 | 周日 |
|---|---|---|---|
| Go | time.Time.Weekday() |
6 | 0 |
| Python | date.weekday() |
5 | 6 |
| Python(ISO) | date.isoweekday() |
6 | 7 |
| Java 8+ | LocalDate.getDayOfWeek() |
6 | 7 |
| PHP | DateTime::format('N') |
6 | 7 |
| PHP(备选) | date('w') |
6 | 0 |
| Swift | Calendar.isDateInWeekend(_:) |
- | - |
| Swift(备选) | component(.weekday, ...) |
7 | 1 |
| Ruby | Date#wday |
6 | 0 |
提示:
- Swift 推荐
isDateInWeekend,可自动适配地区性周末定义;如需固定“周六/周日”,可用.weekday按上表判断。 - PHP 同时提供
N(ISO-8601)与w两套编码,二选一,勿混用。
实现代码(可直接复用)
Go
package weekend
import "time"
// 周日=0,周六=6
func IsWeekend(t time.Time) bool {
wd := t.Weekday()
return wd == time.Saturday || wd == time.Sunday
}
Python
from datetime import date
# 周一=0,周日=6
def is_weekend(d: date) -> bool:
return d.weekday() >= 5 # 5=周六, 6=周日
Java(java.time)
import java.time.DayOfWeek;
import java.time.LocalDate;
public final class Weekend {
private Weekend() {}
public static boolean isWeekend(LocalDate d) {
DayOfWeek day = d.getDayOfWeek();
return day == DayOfWeek.SATURDAY || day == DayOfWeek.SUNDAY;
}
}
PHP
<?php
// 1=周一 … 7=周日
function is_weekend(DateTimeInterface $dt): bool {
return (int)$dt->format('N') >= 6; // 6=周六, 7=周日
}
Swift
import Foundation
// 根据 Calendar/Locale 自动识别周末(多数地区为周六/周日)
func isWeekend(_ date: Date, calendar: Calendar = .current) -> Bool {
calendar.isDateInWeekend(date)
}
Ruby
require 'date'
# 周日=0,周六=6
def weekend?(d)
w = d.wday
w == 0 || w == 6
end
注意事项
- 时区:同一时刻在不同时区可能对应不同“本地日期”,进而影响周末判断。请显式指定并统一时区。
- 本地化:部分地区的“周末”不是周六/周日(如周五/周六)。若面向国际用户,周末定义应可配置。
- 测试:使用固定日期断言(如 2025-01-04 为周六),避免
now()/today()带来的不确定性;覆盖跨时区、边界情况。
结论
先确认 API 的星期编码或直接使用更安全的“内置周末”判断(如 Swift 的 isDateInWeekend),再以独立、可测试的函数封装逻辑,并显式处理时区/本地化,即可得到一致、可预测的结果。