把“yyyy-mm-dd”String型转为同格式的Date型方法

本文介绍了一种将表单提交的时间转换为与数据库中DateTime类型字段进行比较的有效方法。通过使用java.sql.Date.valueOf(String s)方法,可以将字符串形式的日期转换为能够用于数据库操作的日期格式。然而,此方法仅支持yyyy-mm-dd格式的日期转换。

项目中要把表单传过来的时间转为能和数据库中DateTime型字段比较大小的形式,查了好多方法,大部分都是说用SimpleDateFormat转换,但是转出来的结果总是像FRI Jan 29 CTS 2010之类的形式,后来终于让我在java.sql.Date中找到了一个办法(在java.util.Date里没找到)java.sql.Date.valueOf(String s);,只是这个方法只能转换成"yyyy-mm-dd" 形式的日期,不知道能不能随意的加上时分秒(API上说SQL Date 值没有时间组件,所以我估计不行)

<think>我们有两个步骤:1.解析原始字符串(格式为"yyyy-mm-dd")为Date对象2.将Date对象格式化为"yyyymmdd日"的字符串参考引用[3]中的方法,我们可以这样做:第一步:使用SimpleDateFormat解析原始字符串,指定格式为"yyyy-MM-dd"第二步:使用另一个SimpleDateFormat,指定格式为"yyyyMMdd日",然后格式化上一步得到的Date对象注意:月份和日期的格式符是MM(大写)和dd(小写),而年份是yyyy(小写)。在输出格式中,我们使用中文年月日。另外,注意异常处理,解析时可能会抛出ParseException。根据引用[2]的提示,日期本身没有格式,我们只是在字符串和日期对象之间转换,以及日期对象和字符串之间转换。下面我们写代码示例:</think> ### 日期格式转换:从 yyyy-mm-ddyyyymmdd日 将日期字符串从 `yyyy-MM-dd` 格式转换为 `yyyyMMdd日` 中文格式,可以通过以下步骤实现: ```java import java.text.ParseException; import java.text.SimpleDateFormat; public class DateFormatConverter { public static void main(String[] args) { // 原始日期字符串 (yyyy-MM-dd格式) String inputDate = "2025-06-06"; try { // 步骤1:将输入字符串解析为Date对象 SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = inputFormat.parse(inputDate); // 步骤2:将Date对象格式化为中文日期 SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd日"); String formattedDate = outputFormat.format(date); System.out.println("转换结果: " + formattedDate); // 输出: 2025年06月06日 } catch (ParseException e) { System.err.println("日期解析错误: " + e.getMessage()); } } } ``` ### 关键说明: 1. **输入格式解析**: - 使用 `SimpleDateFormat("yyyy-MM-dd")` 解析原始日期字符串 -格式匹配如 `2025-06-06` 的日期格式[^3][^4] 2. **输出格式设置**: - 使用 `SimpleDateFormat("yyyyMMdd日")` 指定中文输出格式 - 格式符说明: - `yyyy` → 四位数年份 - `MM` → 两位数月份(自动补零) - `dd` → 两位数日期(自动补零) 3. **日期处理流程**: ```mermaid graph TD A[原始字符串<br>yyyy-MM-dd] --> B(解析为Date对象) B --> C(格式化为中文字符串) C --> D[结果: yyyyMMdd日] ``` 4. **注意事项**: - 必须捕获 `ParseException` 处理可能的解析错误 - `SimpleDateFormat` 非线程安全,多线程环境需使用 `ThreadLocal` 或 Java8 的 `DateTimeFormatter` - 中文输出格式中日期间隔使用的是中文全角字符(年月日)[^3] ### 输出示例: ``` 原始格式: 2025-06-06 转换结果: 2025年06月06日 ``` ### 相关问题 1. **如何处理带时间部分的日期转换**? 如需处理 `2025-06-06 14:30:00` 这样的完整日期,可修改输入格式为 `"yyyy-MM-dd HH:mm:ss"`[^1] 2. **Java8 的新日期API 如何实现相的转换**? 推荐使用 `DateTimeFormatter` 代替 `SimpleDateFormat`,更安全高效: ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; String formatted = LocalDate.parse("2025-06-06") .format(DateTimeFormatter.ofPattern("yyyyMMdd日")); ``` 3. **如何将中文日期转换回标准格式**? 只需反转处理流程: ```java SimpleDateFormat reverseFormat = new SimpleDateFormat("yyyyMMdd日"); Date date = reverseFormat.parse("2025年06月06日"); String standardDate = new SimpleDateFormat("yyyy-MM-dd").format(date); ``` 4. **如何处理不地区的日期格式**? 使用 `Locale` 参数支持本地化: ```java // 示例:英文格式 June 06, 2025 new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH).format(date); ``` [^1]: String类型日期格式转换参考 [^3]: 中文日期格式转换示例 [^4]: 简单日期格式解析方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值