如何调整Java Excel考勤程序的日期输出为指定格式?
解决方案:自定义日期输出格式
要实现「01 August 2022, Monday」的日期输出格式,你需要用格式化工具替换直接打印Date实例的默认输出,以下是两种适配你现有代码的实现方式:
方法一:使用SimpleDateFormat(适配现有代码)
- 定义格式模板:用
"dd MMMM yyyy, EEEE"作为格式字符串,各部分含义:dd:两位数字日期(如01、27)MMMM:完整英文月份名(如August、July)yyyy:四位数字年份(如2022)EEEE:完整英文星期名(如Monday、Wednesday)
- 指定Locale:添加
Locale.US确保月份和星期始终是英文,避免系统默认语言干扰。 - 修改代码:
- 导入
java.util.Locale类 - 创建格式化实例,输出时用格式化后的字符串替代原
Date对象
- 导入
修改后的关键代码片段:
import java.util.Locale; // 新增导入 public class ExcelReader { public static void main(String [] args) { // 初始化日期格式化器 SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMMM yyyy, EEEE", Locale.US); try { // ... 原有代码保持不变 ... if (ExcelReader.DayCheck(sdate)){ // 替换原输出逻辑,使用格式化后的日期 System.out.println("No entry found for "+name+" on "+outputFormat.format(sdate)); } // ... 原有代码保持不变 ... } catch(Exception e) { e.printStackTrace(); } } // ... 原有DayCheck方法不变 ... }
方法二:使用Java 8+ 日期API(更推荐)
如果你使用Java 8或更高版本,建议用线程安全的java.time包替代旧的Date/CalendarAPI:
- 转换Date为LocalDate:将Excel读取的
Date转换为现代的LocalDate - 用DateTimeFormatter格式化
修改后的关键代码片段:
import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Locale; // 新增导入 public class ExcelReader { public static void main(String [] args) { // 初始化现代日期格式化器 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy, EEEE", Locale.US); try { // ... 原有代码保持不变 ... Date sdate=date_cell.getDateCellValue(); if (ExcelReader.DayCheck(sdate)){ // 转换为LocalDate并格式化 LocalDate localDate = sdate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); String formattedDate = localDate.format(formatter); System.out.println("No entry found for "+name+" on "+formattedDate); } // ... 原有代码保持不变 ... } catch(Exception e) { e.printStackTrace(); } } // 可选:将DayCheck方法改为使用LocalDate public static boolean DayCheck(Date date) { LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); java.time.DayOfWeek day = localDate.getDayOfWeek(); return day != java.time.DayOfWeek.SATURDAY && day != java.time.DayOfWeek.SUNDAY; } }
修改后的输出示例
No entry found for Shiv on 27 July 2022, Wednesday No entry found for Shiv on 28 July 2022, Thursday No entry found for Shiv on 29 July 2022, Friday No entry found for Shiv on 01 August 2022, Monday No entry found for Shiv on 03 August 2022, Wednesday No entry found for Shiv on 04 August 2022, Thursday
内容的提问来源于stack exchange,提问作者lord foul
相关产品推荐
相关产品推荐

