杰瑞科技汇

java calendar 星期

在 Java 中处理“星期”相关的功能,主要涉及 java.util.Calendarjava.util.Date 以及 Java 8 引入的 java.time 包,下面我将详细介绍如何使用这些类来获取和操作星期信息。

java calendar 星期-图1
(图片来源网络,侵删)

使用 java.util.Calendar (旧版 API)

Calendar 是 Java 8 之前处理日期和时间的主要类,要获取星期信息,可以使用 get() 方法并传入 Calendar 类中定义的常量。

获取星期几 (1-7 或 0-6)

Calendar 提供了两个与星期相关的字段:

  • Calendar.DAY_OF_WEEK: 表示一个星期中的第几天,它的值取决于 Calendar 的地区设置。
    • 在美国等地区(Locale.US),周日是第一天,值为 1;周六是最后一天,值为 7
    • 在中国等地区(Locale.CHINA),周一是第一天,值为 1;周日是最后一天,值为 7
  • Calendar.DAY_OF_WEEK_IN_MONTH: 表示当前月份中第几个星期几(5月的第二个周五)。

示例代码:

import java.util.Calendar;
import java.util.Locale;
public class CalendarWeekExample {
    public static void main(String[] args) {
        // 1. 获取一个 Calendar 实例,默认使用当前时间和系统默认地区
        Calendar calendar = Calendar.getInstance();
        // 2. 获取今天是星期几 (1-7)
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("今天是星期几 (1-7): " + dayOfWeek);
        // --- 根据不同地区获取星期名称 ---
        // 使用美国地区 (周日为第一天)
        calendar = Calendar.getInstance(Locale.US);
        dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("在美国地区,今天是星期几 (1-7): " + dayOfWeek);
        // 使用中国地区 (周一为第一天)
        calendar = Calendar.getInstance(Locale.CHINA);
        dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("在中国地区,今天是星期几 (1-7): " + dayOfWeek);
        // 3. 将数字转换为星期名称
        String[] weekDays = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        // 注意:weekDays[0] 是空的,因为 Calendar.DAY_OF_WEEK 的值从 1 开始
        String weekDayName = weekDays[dayOfWeek];
        System.out.println("今天是: " + weekDayName);
        // 4. 设置特定的日期并获取星期
        // 假设我们想查询 2025年10月1日 是星期几
        calendar.set(2025, Calendar.OCTOBER, 1); // 月份从0开始,OCTOBER是9
        int specificDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("2025年10月1日是: " + weekDays[specificDayOfWeek]);
    }
}

输出示例 (假设今天是2025年10月27日,星期五):

java calendar 星期-图2
(图片来源网络,侵删)
今天是星期几 (1-7): 6
在美国地区,今天是星期几 (1-7): 6
在中国地区,今天是星期几 (1-7): 6
今天是: 星期五
2025年10月1日是: 星期日

使用 java.time (Java 8+ 新版 API)

从 Java 8 开始,官方推荐使用 java.time 包中的类,它们更现代、更易用,并且是不可变的,核心类是 LocalDate

java.time 中的星期定义是国际标准 (ISO-8601),即:

  • 周一为第一天,值为 1
  • 周日为最后一天,值为 7。 这个定义是固定的,不受地区设置影响,更加清晰。

获取星期几 (1-7)

使用 LocalDategetDayOfWeek() 方法会返回一个 DayOfWeek 枚举对象,这比直接使用数字更安全、更具可读性。

示例代码:

java calendar 星期-图3
(图片来源网络,侵删)
import java.time.DayOfWeek;
import java.time.LocalDate;
public class JavaTimeWeekExample {
    public static void main(String[] args) {
        // 1. 获取当前日期
        LocalDate today = LocalDate.now();
        // 2. 获取 DayOfWeek 枚举
        DayOfWeek dayOfWeek = today.getDayOfWeek();
        // 3. 从枚举中获取星期几的数字 (1-7, 周一为1)
        int dayOfWeekValue = dayOfWeek.getValue();
        // 4. 从枚举中获取星期几的名称
        String dayOfWeekName = dayOfWeek.toString(); // "FRIDAY"
        String displayName = dayOfWeek.getDisplayName(java.time.format.TextStyle.FULL, java.util.Locale.CHINA); // "星期五"
        System.out.println("今天是: " + today);
        System.out.println("今天是星期几 (枚举): " + dayOfWeek);
        System.out.println("今天是星期几 (数字 1-7): " + dayOfWeekValue);
        System.out.println("今天是星期几 (英文名称): " + dayOfWeekName);
        System.out.println("今天是星期几 (中文全称): " + displayName);
        // 5. 设置特定的日期并获取星期
        LocalDate specificDate = LocalDate.of(2025, 10, 1);
        DayOfWeek specificDayOfWeek = specificDate.getDayOfWeek();
        System.out.println("2025年10月1日是: " + specificDayOfWeek.getDisplayName(java.time.format.TextStyle.FULL, java.util.Locale.CHINA));
    }
}

输出示例:

今天是: 2025-10-27
今天是星期几 (枚举): FRIDAY
今天是星期几 (数字 1-7): 5
今天是星期几 (英文名称): FRIDAY
今天是星期几 (中文全称): 星期五
2025年10月1日是: 星期日

总结与对比

特性 java.util.Calendar java.time.LocalDate
版本 Java 1.1 及以后 Java 8 及以后 (推荐)
星期定义 受地区影响 (Locale) 固定标准 (ISO-8601,周一为1)
获取方式 calendar.get(Calendar.DAY_OF_WEEK) localDate.getDayOfWeek()
返回类型 int (1-7 或 0-6) DayOfWeek 枚举
优点 旧版Java兼容 不可变线程安全、API清晰、功能强大
缺点 可变、线程不安全、API笨重、易出错 -
  • 如果你使用的是 Java 8 或更高版本强烈推荐使用 java.time.LocalDateDayOfWeek 枚举,它更直观、更安全,并且避免了 Calendar 的地区陷阱。
  • 如果你必须在旧版 Java (Java 7 或更早) 环境中工作,那么你只能使用 java.util.Calendar,在使用时,请务必注意 DAY_OF_WEEK 的值会根据 Locale 而改变,最好显式指定一个你熟悉的 Locale (如 Locale.USLocale.CHINA) 以避免混淆。
分享:
扫描分享到社交APP
上一篇
下一篇