Java日期格式化求助:指定格式处理日期及解析代码错误修正
问题解答
1. 如何用指定格式格式化同一日期数据?
在Java里,你可以按以下步骤实现日期的格式化:
- 先确定你需要的格式字符串,这里一定要注意格式符的正确使用(比如
MM代表两位月份,mm是分钟,yyyy是四位年份,dd是两位日期,这些细节很容易踩坑) - 创建日期格式化器实例:Java 8之前用
SimpleDateFormat,Java 8及以后更推荐用java.time包下的DateTimeFormatter(线程安全,API设计更清晰) - 调用格式化方法,把日期对象转换成指定格式的字符串
举个实际例子:
// Java 8之前的实现方式 Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(now); System.out.println(formattedDate); // 输出类似 2024-05-20 14:30:00 // Java 8+ 推荐的实现方式 LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDate = now.format(formatter); System.out.println(formattedDate);
2. 修正你的日期解析代码问题
你的代码问题出在格式字符串的符号使用错误:你写的yyyy-mm-dd里,mm代表的是分钟,而不是月份!所以解析2018-05-23时,程序把05当成了分钟,月份则默认使用1月(Jan),这就导致输出不符合预期。
正确的月份格式符是大写的MM,修正后的代码如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Testing { public static void main(String[] args) throws ParseException { String format = "yyyy-MM-dd"; // 把小写mm改成大写MM String date = "2018-05-23"; Date date2 = new SimpleDateFormat(format).parse(date); System.out.println(date2); // 现在会输出 Tue May 23 00:05:00 IST 2018 } }
另外补充一句:如果你的项目是基于Java 8及以上版本,强烈建议使用java.time包下的类来处理日期,避免SimpleDateFormat的线程安全问题,示例代码如下:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.ZoneId; import java.util.Date; public class Testing { public static void main(String[] args) { String format = "yyyy-MM-dd"; String dateStr = "2018-05-23"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); LocalDate localDate = LocalDate.parse(dateStr, formatter); // 如果需要转换成Date对象(兼容旧代码) Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); System.out.println(date); // 同样输出预期结果 } }
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

