当前位置:首页 > 后端开发 > 正文

Java如何输出星期几?

在Java中,可通过 java.util.Calendarjava.time.LocalDate获取星期几,使用 Calendar需结合 SimpleDateFormat格式化输出;Java 8及以上推荐 LocalDate.getDayOfWeek()直接返回英文星期名,或通过 DateTimeFormatter本地化输出。

在Java中输出星期几有多种方法,主要分为传统Calendar类和现代java.time包(Java 8+推荐),以下是详细实现方案:


方法1:使用 java.time 包(推荐)

Java 8引入的java.time API线程安全且设计清晰,是官方推荐方案。

示例1:输出当前日期的星期几

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now(); // 获取当前日期
        String dayOfWeek = today.getDayOfWeek()              // 获取星期枚举(如 MONDAY)
                .getDisplayName(TextStyle.FULL, Locale.CHINA); // 转为中文(如“星期一”)
        System.out.println("今天是:" + dayOfWeek);
    }
}

输出
今天是:星期一(根据实际日期变化)

示例2:输出指定日期的星期几

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        LocalDate customDate = LocalDate.of(2025, 10, 1); // 指定日期
        String dayOfWeek = customDate.getDayOfWeek()
                .getDisplayName(TextStyle.FULL, Locale.CHINA);
        System.out.println("2025年10月1日是:" + dayOfWeek);
    }
}

输出
2025年10月1日是:星期日

Java如何输出星期几?  第1张

关键参数说明:

  • TextStyle:控制输出格式
    • FULL → 星期一
    • SHORT → 周一
    • NARROW → 一(部分语言可能不适用)
  • Locale:指定语言环境
    • Locale.CHINA → 中文
    • Locale.US → 英文(如 Monday)

方法2:使用 Calendar 类(旧版)

适用于Java 8以下版本,但需注意线程安全问题。

import java.util.Calendar;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 获取星期数字(1=周日,2=周一...)
        // 转换为中文星期
        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        System.out.println("今天是:" + weekDays[dayOfWeek - 1]);
    }
}

常见问题解决

  1. 数字转星期

    • java.time:直接调用DayOfWeek.of(1).getDisplayName(...)(1=周一,7=周日)
    • Calendar:数字范围1~7(1=周日,7=周六)
  2. 中英文切换
    修改Locale参数:

    // 英文输出
    String enWeek = today.getDayOfWeek()
                   .getDisplayName(TextStyle.FULL, Locale.US); // e.g., "Monday"
  3. 缩写形式

    // 中文缩写(如“周一”)
    String shortWeek = today.getDayOfWeek()
                      .getDisplayName(TextStyle.SHORT, Locale.CHINA);

最佳实践建议

  1. 优先使用 java.time
    新API避免线程安全问题,代码更简洁(如直接通过日期对象获取星期)。

  2. 处理用户输入日期
    结合DateTimeFormatter解析字符串:

    String input = "2025-12-25";
    LocalDate date = LocalDate.parse(input); // 自动解析标准格式
    System.out.println(date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA));
  3. 时区敏感场景
    使用ZonedDateTime替代LocalDate

    ZonedDateTime zonedTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
    String week = zonedTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);

需求 推荐方法
当前日期星期 LocalDate.now().getDayOfWeek()
指定日期星期 LocalDate.of(...).getDayOfWeek()
兼容旧项目(<Java8) Calendar + 自定义数组
多语言支持 调整Locale参数(如Locale.US

官方文档参考:

  • Java 17 DayOfWeek 文档
  • Java 8日期时间教程

通过标准API实现可确保代码稳定性和可维护性,避免自行维护星期映射表带来的潜在错误。

0