杰瑞科技汇

Java Calendar如何获取星期几?

  1. 传统的 java.util.Calendar (已过时,但可能在旧代码中见到)
  2. 现代的 java.time (Java 8 及以上版本推荐使用)

下面我将分别详细介绍这两种方式,并提供代码示例。


传统方式:java.util.Calendar (已过时)

Calendar 类是 Java 8 之前处理日期和时间的核心类,它使用一个整数常量来表示星期,这个整数是基于美国的习惯,周日是第一天,周六是最后一天

星期常量

常量 描述
Calendar.SUNDAY 1 星期日
Calendar.MONDAY 2 星期一
Calendar.TUESDAY 3 星期二
Calendar.WEDNESDAY 4 星期三
Calendar.THURSDAY 5 星期四
Calendar.FRIDAY 6 星期五
Calendar.SATURDAY 7 星期六

获取当前是星期几

get() 方法用于获取 Calendar 实例的某个字段值。

import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        // 1. 获取一个 Calendar 实例,默认是当前时间
        Calendar calendar = Calendar.getInstance();
        // 2. 获取星期几 (返回一个整数,1=周日, 2=周一, ..., 7=周六)
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("今天是星期: " + dayOfWeek); // 输出类似: 今天是星期: 5 (代表星期四)
        // 3. 将整数转换为对应的星期名称
        String weekDayName;
        switch (dayOfWeek) {
            case Calendar.SUNDAY:
                weekDayName = "星期日";
                break;
            case Calendar.MONDAY:
                weekDayName = "星期一";
                break;
            case Calendar.TUESDAY:
                weekDayName = "星期二";
                break;
            case Calendar.WEDNESDAY:
                weekDayName = "星期三";
                break;
            case Calendar.THURSDAY:
                weekDayName = "星期四";
                break;
            case Calendar.FRIDAY:
                weekDayName = "星期五";
                break;
            case Calendar.SATURDAY:
                weekDayName = "星期六";
                break;
            default:
                weekDayName = "未知";
                break;
        }
        System.out.println("今天是: " + weekDayName); // 输出: 今天是: 星期四
    }
}

注意Calendar 类是可变的,并且设计上存在一些问题,因此在现代 Java 开发中不推荐使用


现代方式:java.time 包 (推荐)

Java 8 引入了全新的 java.time 包,它提供了更强大、更直观、更不可变的日期和时间 API,这是处理日期和时间的首选方式

java.time 中,java.time.DayOfWeek 枚举专门用来表示星期,它遵循国际标准 ISO-8601,即周一是一周的第一天 (Day 1),周日是最后一天 (Day 7)

DayOfWeek 枚举

枚举常量 描述
DayOfWeek.MONDAY 1 星期一
DayOfWeek.TUESDAY 2 星期二
DayOfWeek.WEDNESDAY 3 星期三
DayOfWeek.THURSDAY 4 星期四
DayOfWeek.FRIDAY 5 星期五
DayOfWeek.SATURDAY 6 星期六
DayOfWeek.SUNDAY 7 星期日

获取当前是星期几

import java.time.DayOfWeek;
import java.time.LocalDate;
public class DayOfWeekExample {
    public static void main(String[] args) {
        // 1. 获取当前日期 (不包含时间)
        LocalDate today = LocalDate.now();
        // 2. 获取 DayOfWeek 枚举
        DayOfWeek dayOfWeek = today.getDayOfWeek();
        System.out.println("今天是: " + dayOfWeek); // 输出类似: 今天是: THURSDAY
        // 3. 获取星期几的整数值 (ISO-8601标准: 1=周一, 7=周日)
        int dayValue = dayOfWeek.getValue();
        System.out.println("今天是星期: " + dayValue); // 输出: 今天是星期: 4 (代表星期四)
        // 4. 获取中文的星期名称
        String weekDayNameInChinese = getChineseDayName(dayOfWeek);
        System.out.println("今天是: " + weekDayNameInChinese); // 输出: 今天是: 星期四
    }
    /**
     * 将 DayOfWeek 枚举转换为中文星期名称
     */
    public static String getChineseDayName(DayOfWeek dayOfWeek) {
        switch (dayOfWeek) {
            case MONDAY:
                return "星期一";
            case TUESDAY:
                return "星期二";
            case WEDNESDAY:
                return "星期三";
            case THURSDAY:
                return "星期四";
            case FRIDAY:
                return "星期五";
            case SATURDAY:
                return "星期六";
            case SUNDAY:
                return "星期日";
            default:
                return "未知";
        }
    }
}

DayOfWeek 的其他常用方法

DayOfWeek 枚举本身也提供了一些非常方便的方法。

import java.time.DayOfWeek;
import java.time.LocalDate;
public class DayOfWeekMethodsExample {
    public static void main(String[] args) {
        DayOfWeek day = LocalDate.now().getDayOfWeek();
        // 1. 获取星期几的整数值 (1-7)
        System.out.println("整数值: " + day.getValue()); // e.g., 4
        // 2. 获取英文全名
        System.out.println("英文全名: " + day.name()); // e.g., THURSDAY
        System.out.println("英文格式化: " + day.toString()); // e.g., THURSDAY
        // 3. 获取英文缩写
        System.out.println("英文缩写: " + day.getDisplayName(java.time.format.TextStyle.SHORT, java.util.Locale.US)); // e.g., Thu
        // 4. 计算加减天数
        DayOfWeek previousDay = day.minus(1); // 昨天
        DayOfWeek nextDay = day.plus(1);     // 明天
        System.out.println("昨天是: " + previousDay); // e.g., WEDNESDAY
        System.out.println("明天是: " + nextDay);     // e.g., FRIDAY
        // 5. 判断是否是周末
        boolean isWeekend = day == DayOfWeek.SATURDAY || day == DayOfWeek.SUNDAY;
        System.out.println("今天是周末吗? " + isWeekend); // e.g., false
        // 6. 判断是否是工作日
        boolean isWeekday = !isWeekend;
        System.out.println("今天是工作日吗? " + isWeekday); // e.g., true
    }
}

总结与对比

特性 java.util.Calendar java.time.DayOfWeek
API 来源 Java 1.1 Java 8
推荐度 不推荐 (已过时) 强烈推荐
星期定义 周日为第一天 (1-7) 周一为第一天 (1-7) (ISO-8601 标准)
数据类型 整数 (int) 枚举 (DayOfWeek)
可变性 可变,线程不安全 不可变,线程安全
功能 基础功能 功能丰富,提供加减、判断等方法
代码可读性 较差 (如 Calendar.THURSDAY) 优秀 (如 DayOfWeek.THURSDAY)

对于任何新的 Java 项目,请务必使用 java.time,它更符合现代编程习惯,功能更强大,能避免很多旧 API 的陷阱,如果你正在维护旧的代码,你可能会遇到 Calendar,但在新功能开发中,应该用 java.time 来替代它。

分享:
扫描分享到社交APP
上一篇
下一篇