java格式化date成字符串的详细方法和示例
前言
在Java中将java.util.Date对象格式化为字符串,主要使用SimpleDateFormat类(或Java 8及更高版本的DateTimeFormatter)。以下是详细方法和示例:
一、使用SimpleDateFormat(Java 7及以下)
步骤:
创建SimpleDateFormat对象:指定日期格式模式(如
"yyyy-MM-dd HH:mm:ss")。调用format()方法:将
Date对象转换为字符串。
常用格式符号:
| 符号 | 含义 | 示例 |
|---|---|---|
yyyy | 四位年份 | 2025 |
MM | 两位月份 | 06 |
dd | 两位日期 | 24 |
HH | 24小时制 | 14 |
hh | 12小时制 | 02 |
mm | 分钟 | 30 |
ss | 秒 | 45 |
SSS | 毫秒 | 789 |
E | 星期几 | Tue |
a | AM/PM标记 | PM |
z | 时区 | CST |
代码示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 创建Date对象(当前时间)
Date date = new Date();
// 示例1:格式化为"年-月-日 时:分:秒"
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sdf1.format(date); // 如:2025-06-24 15:30:45
System.out.println(str1);
// 示例2:格式化为"月/日/年 时:分 AM/PM"
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
String str2 = sdf2.format(date); // 如:06/24/2025 03:30 PM
System.out.println(str2);
// 示例3:自定义格式(带星期和时区)
SimpleDateFormat sdf3 = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
String str3 = sdf3.format(date); // 如:Tue, 24 Jun 2025 15:30:45 CST
System.out.println(str3);
}
}
二、注意事项
线程安全问题
SimpleDateFormat非线程安全。多线程环境下建议:每次创建新实例(性能较低),或
使用
ThreadLocal封装实例。private static final ThreadLocal<SimpleDateFormat> threadSafeFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd")); String formattedDate = threadSafeFormat.get().format(date);
异常处理
解析字符串时需捕获
ParseException,但格式化操作一般无需异常处理。时区设置
默认使用系统时区。可通过
setTimeZone()修改:sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
三、Java 8+ 推荐方案(DateTimeFormatter)
Java 8引入的java.time.format.DateTimeFormatter线程安全且更灵活:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 格式化为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter); // 如:2025-06-24 15:30:45
System.out.println(formattedDate);
}
}
四、总结
| 方法 | 适用场景 | 线程安全 |
|---|---|---|
SimpleDateFormat | Java 7及以下 | ❌ 否 |
DateTimeFormatter | Java 8+ | ✅ 是 |
简单需求:直接使用
SimpleDateFormat.format()。高并发场景:用
ThreadLocal或升级到Java 8的DateTimeFormatter。复杂操作:优先选择
java.time包(如LocalDateTime、ZonedDateTime)。
可通过在线工具(如 SimpleDateFormat Tester)验证格式模式是否正确。
总结
到此这篇关于java格式化date成字符串的文章就介绍到这了,更多相关java格式化date成字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java Comparator.comparing比较导致空指针异常的解决
这篇文章主要介绍了Java Comparator.comparing比较导致空指针异常的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析
在我们日常的开发中,我们经常会用到Filter和Interceptor,这篇文章主要介绍了Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系 ,需要的朋友可以参考下2022-10-10
TransmittableThreadLocal通过javaAgent实现线程传递并支持ForkJoin
这篇文章主要介绍了TransmittableThreadLocal通过javaAgent实现线程传递并支持ForkJoin详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-06-06
Springboot在有参构造方法类中使用@Value注解取值
这篇文章主要介绍了Springboot在有参构造方法类中使用@Value注解取值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-06-06
SpringBoot @Configuration与@Bean注解使用介绍
这篇文章主要介绍了SpringBoot中的@Configuration与@Bean注解,在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制,只有把这些都搞清楚了,我们在之后使用才会更加得心应手2022-10-10


最新评论