使用 simpledateformat 并设置模式字符串为 e 或 eeee 即可格式化星期几。其中 e 输出简写(如“周一”),eeee 输出全称(如“星期一”)。需配合 locale.china 确保中文环境正确显示。

SimpleDateFormat 如何根据 Locale 输出不同星期的文本
通过传入 Locale 对象,可以控制日期格式化的语言环境。在 Java 中,SimpleDateFormat 构造函数接受 String 和 Locale 两个参数。若未指定 Locale,默认使用 JVM 的系统区域设置,可能导致在不同服务器上输出英文或乱码。显式传入 Locale.CHINA 可保证输出简体中文的星期名称。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Date now = new Date();
// 简写:周一
SimpleDateFormat sdfShort = new SimpleDateFormat("E", Locale.CHINA);
System.out.println(sdfShort.format(now));
// 全称:星期一
SimpleDateFormat sdfLong = new SimpleDateFormat("EEEE", Locale.CHINA);
System.out.println(sdfLong.format(now));
}
}
运行上述代码,假设当前为星期三,输出结果为:
周三
星期三
SimpleDateFormat 线程安全性及替代方案
SimpleDateFormat 不是线程安全的,多线程环境下共享实例会导致数据错乱或异常。推荐在 Java 8+ 中使用 DateTimeFormatter,它是不可变且线程安全的。使用 DateTimeFormatter.ofPattern("EEEE", Locale.CHINA) 获取格式化器,再调用 LocalDate.now().format(formatter) 完成转换。
一款AI工具,主要用于Codex 通用编排:利用 `update_plan` 与后台 PTY 终端并行运行 `codex exec` 工作进程,适合需要提升相关任务效率的用户。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class MainNew {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.CHINA);
String dayOfWeek = today.format(formatter);
System.out.println(dayOfWeek);
}
}
该代码同样输出当前日期的中文星期全称,如“星期三”。此方式避免了同步锁开销,适合高并发场景。
基于程序中某个输入、条件或结果的具体问题
当输入日期为闰年二月二十九日时,格式化操作是否会因月份天数变化而出错?答案是不会。SimpleDateFormat 和 DateTimeFormatter 均能正确处理闰年日期。只要传入的 Date 或 LocalDate 对象本身有效,格式化过程仅提取时间字段进行文本映射,不涉及日历计算。因此,无论是否为闰年,只要日期合法,输出结果均准确反映该日的星期几。










