Java中如何返回指定格式日期?SimpleDateFormat使用问题求助
问题根源你得搞清楚!
你现在遇到的问题,核心是Date对象本身不存储任何日期格式——它本质上就是个时间戳,记录的是从1970年1月1日00:00:00 UTC到目标时间的毫秒数。当你打印它或者直接转字符串时,它会调用自带的toString()方法,默认输出就是Wed Jul 03 00:00:00 IST 2019这种格式,和你用SimpleDateFormat指定的格式半毛钱关系都没有。
而且你的方法还搞反了操作:parse()是把符合格式的字符串转成Date对象,而你想要的是把日期转成指定格式的字符串,这得用format()方法才行!
给你两种解决方案
方案一:修正你的SimpleDateFormat代码
如果你还想用旧的API,那得把方法返回类型改成String,然后用format()方法输出指定格式:
private static final String DOB_FORMAT = "yyyy-MM-dd"; public static String convertStringToFormattedDateString(String date) { if (date != null) { SimpleDateFormat sdf = new SimpleDateFormat(DOB_FORMAT, Locale.ENGLISH); try { // 先把字符串解析成Date对象 Date parsedDate = sdf.parse(date); // 再把Date对象格式化成你要的yyyy-MM-dd字符串 String formattedDate = sdf.format(parsedDate); LOG.info("Formatted date: " + formattedDate); return formattedDate; } catch (ParseException e) { LOG.info("Date Parsing Issue - date: " + date); e.printStackTrace(); } } return null; }
⚠️ 注意:SimpleDateFormat是线程不安全的,别在多线程环境下共享同一个实例哦!
方案二:用Java 8+的新日期API(强烈推荐)
从Java 8开始,Java推出了更合理、线程安全的java.time日期API,用起来更顺手,也不容易踩坑:
private static final DateTimeFormatter DOB_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH); public static String convertStringToFormattedDateString(String date) { if (date != null) { try { // 解析字符串为LocalDate(只存日期,没有时间,更符合你的需求) LocalDate localDate = LocalDate.parse(date, DOB_FORMATTER); // 直接格式化成指定字符串(其实这里直接返回parse后的结果也可以,因为已经验证了格式,显式format更清晰) return localDate.format(DOB_FORMATTER); } catch (DateTimeParseException e) { LOG.info("Date Parsing Issue - date: " + date); e.printStackTrace(); } } return null; }
额外提醒
如果你因为旧代码兼容,必须返回Date对象,那没办法改变它的默认输出格式——要展示成yyyy-MM-dd,只能在需要输出/展示的时候,调用format()方法把它转成字符串才行。
内容的提问来源于stack exchange,提问作者Shreyash Sharma
相关产品推荐
相关产品推荐

