Date类中日期转成指定字符串出现的问题及解决方法

Java日期格式化与解析
本文介绍了Java中SimpleDateFormat类的使用方法,包括日期格式化为字符串和解析字符串为日期的过程,并通过实例演示了如何避免因输入法不同导致的解析错误。

在学习Date内容时跟着做练习,结果老是报错,我寻思着代码也没错鸭,难道是我导的包不正确,

反反复复查错找问题都确认代码没问题,那问题出在哪里?我陷入了沉默……

好在在我火眼金睛的加持下终于找到,上面的11:20:00用的英文输入法的冒号,下面时分秒用的是中文输入法的冒号,自然匹配不了,日期和模式必须一一对照

 改正成英文输入法后成功编译运行 

sdf2.parse(ss);   快速补全 Ctrl+Alt+v

//ParseException  报错,解析异常   解决的快捷键  Alt+Enter,默认第一个

附上完整代码:

package com.com.object_11.APITest_01.Date;
//有毒毒
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*SimpleDateFormat类构造方法
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式

- SimpleDateFormat类的常用方法
  - 格式化(从Date到String)
    - public final String format(Date date):将日期格式化成日期/时间字符串
  - 解析(从String到Date)
    - public Date parse(String source):从给定字符串的开始解析文本以生成日期*/
public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {

//        格式化(从Date到String)
        //        无参构造创建对象
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat();   //无参构造
        //创造方法   sdf.format(d);然后Ctrl+Alt+v自动生成
        String s = sdf.format(d);
        //        输出这个字符串
        System.out.println(s);
        //2022/6/29 上午11:03   (默认的模式)
        System.out.println("-----------");

        //格式化(从Date到String)
//        无参构造创建对象
        Date d1 = new Date();
//       SimpleDateFormat sdf = new SimpleDateFormat();
        //       去掉无参构造,自己写
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");  //年月日时分秒
//创造方法   sdf.format(d1);然后Ctrl+Alt+v自动生成
        String s1 = sdf.format(d1);
//        输出这个字符串
        System.out.println(s1);
        //  (默认的模式)
        System.out.println("-----------");

//        (从String到Date)
        String ss = "2025-06-29 11:20:00";
        //ParseException  报错,解析异常
//      SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dd = sdf2.parse(ss);
        System.out.println(dd);
    }
}
//2022/6/30 下午5:00
//-----------
//2022/6/30 下午5:00
//-----------
//Sun Jun 29 11:20:00 CST 2025

<think> 我们有一个引用,说明了如何将字符串转换Date对象。现在用户的问题是相反的:将Date对象转换日期字符串。 在Java中,我们通常使用SimpleDateFormat来格式化Date对象为字符串。 步骤: 1. 创建一个SimpleDateFormat对象,并传入所需的日期时间格式的字符串模式。 2. 调用SimpleDateFormat对象的format方法,传入Date对象,返回格式化后的字符串。 注意:SimpleDateFormat是java.text包中的,因此需要导入。 我们可以参考引用中使用的模式,例如: 引用1中使用了:"yyyy-MM-dd HH-mm-ss" 和 "yyyy:MM:dd HH:mm:ss:SSS" 现在,我们将展示如何将Date对象转换字符串。 示例代码: import java.text.SimpleDateFormat; import java.util.Date; public class DateToStringExample { public static void main(String[] args) { // 获取当前日期和时间 Date date = new Date(); // 创建一个格式器,格式为 "yyyy-MM-dd HH:mm:ss" SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(date); System.out.println(dateString); // 另一个格式,包含毫秒 SimpleDateFormat sdfWithMillis = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS"); String dateStringWithMillis = sdfWithMillis.format(date); System.out.println(dateStringWithMillis); } } 需要注意的是,SimpleDateFormat的格式模式中: - yyyy:四位年份 - MM:两位月份(01-12) - dd:两位日期(01-31) - HH:24小时制的小时(00-23) - mm:分钟(00-59) - ss:秒(00-59) - SSS:毫秒(000-999) 另外,在格式化时,我们可以使用任意分隔符,如冒号、短横线等。 提示:由于SimpleDateFormat不是线程安全的,在并发环境下需要注意,可以使用ThreadLocal来保证线程安全,或者使用Java 8中的DateTimeFormatter(推荐使用Java 8的新日期时间API)。 但是,用户的问题是关于Date对象转换字符串,所以使用SimpleDateFormat是直接的。 如果用户使用Java 8及以上,推荐使用新的java.time包中的,例如: 使用LocalDateTime和DateTimeFormatter。 不过,用户要求的是Date对象(java.util.Date)的转换,所以我们可以继续使用SimpleDateFormat。 但也可以将java.util.Date转换java.time.LocalDateTime,然后再格式化,不过这样需要多一步转换。 考虑到用户明确要求将Date对象转换字符串,我们直接使用SimpleDateFormat。 另外,注意时区问题:SimpleDateFormat默认使用系统时区,如果需要指定时区,可以调用setTimeZone方法。 例如: sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); 下面是一个包含时区设置的示例(如果需要): SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); 现在,按照要求,我们需要生成相关问题。 </think> ### Java中将Date对象转换日期字符串方法Java中将`java.util.Date`对象转换日期字符串,需要使用格式化`SimpleDateFormat`(或Java 8+的`DateTimeFormatter`)。核心步骤如下: #### 📝 方法实现 ```java import java.text.SimpleDateFormat; import java.util.Date; public class DateToStringExample { public static void main(String[] args) { // 1. 创建Date对象(此处用当前时间) Date date = new Date(); // 2. 创建SimpleDateFormat对象并指定格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 3. 调用format()方法转换 String dateString = sdf.format(date); System.out.println("转换结果: " + dateString); // 输出示例: 2023-08-25 14:30:45 } } ``` #### 🔑 关键点说明 1. **格式模式符号**(区分大小写): - `yyyy` → 四位年份(如2023) - `MM` → 两位月份(01-12) - `dd` → 两位日期(01-31) - `HH` → 24小时制小时(00-23) - `mm` → 分钟(00-59) - `ss` → 秒(00-59) - `SSS` → 毫秒(000-999) 2. **常用格式示例**: - 基础格式:`"yyyy-MM-dd"` - 带时分秒:`"yyyy/MM/dd HH:mm:ss"` - 自定义分隔:`"yyyy年MM月dd日 HH时mm分"` - 含毫秒:`"yyyy-MM-dd HH:mm:ss:SSS"` 3. **线程安全建议**(高并发场景): - 为每个线程创建独立的`SimpleDateFormat`实例 - 或使用Java 8+的`DateTimeFormatter`(线程安全): ```java import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String result = LocalDateTime.now().format(formatter); ``` #### ️ 注意事项 - 格式模式需严格匹配:例如`MM`表示月份,`mm`表示分钟 - 错误格式会抛出`IllegalArgumentException` - 时区处理:默认使用系统时区,可通过`setTimeZone()`调整 ```java sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); ``` 📌 **对比字符串Date**: 当需要反向操作(字符串Date)时,需使用`SimpleDateFormat.parse()`方法,如引用中所示[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值