Java获取星期缩写及日期选择校验代码问题咨询
解决Java日期判断与星期缩写的问题
嘿,我来帮你捋捋这个问题~你现在的代码里主要问题是依赖Date.toString()的输出判断星期,这完全不靠谱,而且可能对getDate()的使用也有点混淆,咱们一步步来解决:
先说说你代码里的坑
- 直接用
getDate().toString().contains("Fri")判断周五:Date的toString()输出是固定但依赖JVM的,而且如果系统是其他语言环境,星期缩写会变成别的(比如法语是"Ven"),根本不通用。 - 你说的
getDate()问题,大概率是你把日期选择组件(比如JDateChooser)的getDate()和DateFormat的方法搞混了?如果dppomonth是日期选择器,它的getDate()确实返回Date对象,但转字符串判断肯定不对。
一、正确获取星期缩写
要获取可靠的星期缩写,用SimpleDateFormat指定格式+本地化就好,比如要英文缩写:
// 初始化格式化器,指定英文环境避免本地化影响 SimpleDateFormat weekAbbrFormatter = new SimpleDateFormat("EEE", Locale.ENGLISH); // 从日期组件拿到选中的Date对象 Date selectedDate = dppomonth.getDate(); // 生成星期缩写(Fri/Sat这类) String weekAbbr = weekAbbrFormatter.format(selectedDate);
- 模式
EEE就是星期的缩写形式,加上Locale.ENGLISH确保不管系统语言是什么,输出都是英文缩写。
二、靠谱判断是否为周五
推荐用Java 8+的LocalDate API(旧的Calendar类太坑了,能不用就不用),两种方式给你选:
方式1:Java 8+ 新API(强烈推荐)
import java.time.LocalDate; import java.time.DayOfWeek; import java.util.Date; import java.util.TimeZone; // 把旧的Date转成LocalDate(适配日期组件返回的Date对象) Date selectedDate = dppomonth.getDate(); LocalDate localDate = selectedDate.toInstant() .atZone(TimeZone.getDefault().toZoneId()) .toLocalDate(); // 判断是不是周五,直接用枚举常量,清晰又可靠 if (!DayOfWeek.FRIDAY.equals(localDate.getDayOfWeek())) { JOptionPane.showMessageDialog(this,"Please Select Friday Only..."); dppomonth.setDate(null); }
方式2:兼容Java 7及以下(用Calendar)
如果项目还在用老版本Java,就用这个:
import java.util.Calendar; import java.util.Date; Date selectedDate = dppomonth.getDate(); Calendar cal = Calendar.getInstance(); cal.setTime(selectedDate); // Calendar.FRIDAY是固定常量,直接对比就好 if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.FRIDAY) { JOptionPane.showMessageDialog(this,"Please Select Friday Only..."); dppomonth.setDate(null); }
注意:Calendar的星期是从周日开始计数的,周日=1,周五=6,但直接用
Calendar.FRIDAY常量就不用记数字啦。
最后,替换你原来的方法逻辑
把你原来的dppomonthActionPerformed方法里的判断逻辑换成上面的代码就行,比如用Java 8+的写法,同时要获取星期缩写的话,也可以用新API的方式:
// Java 8+ 获取星期缩写的另一种写法 import java.time.format.TextStyle; import java.util.Locale; String weekAbbr = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
核心就是别再依赖Date.toString()的内容了,用专门的日期API处理星期相关的需求,稳得很~
内容的提问来源于stack exchange,提问作者Danny Younes
相关产品推荐
相关产品推荐

