Java格式化Date为字符串的高级写法

简介:

    本文使用printf来进行格式化日期,不仅不需要创建DateFormat实例,又可以简化代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private static void testDate() {
System.out.printf("%tc\n",new Date()); // Wed Jan 13 18:51:28 CST 2016 (完整的日期和时间)
/** 经常使用 **/
System.out.printf("%tF\n",new Date()); // 2016-01-13 (ISO 8061日期)
System.out.printf("%tD\n",new Date()); // 01/13/16 (美国格式的日期)
/** 经常使用 **/
System.out.printf("%tT\n",new Date()); // 18:51:28 (24小时时间)
System.out.printf("%tr\n",new Date()); // 06:51:28 PM (12小时时间)
System.out.printf("%tR\n",new Date()); // 18:51 (24小时时间没有秒)
System.out.printf("%tY\n",new Date()); // 2016 (4位数字的年(前面补0))
System.out.printf("%ty\n",new Date()); // 16 (年的后两位数字(前面补0))
System.out.printf("%tC\n",new Date()); // 20 (年的前两位数字(前面补0))
System.out.printf("%tb\n",new Date()); // Jan (月的缩写)
System.out.printf("%tB\n",new Date());
System.out.printf("%tm\n",new Date()); // 01 (两位数字的月(前面补0))
System.out.printf("%td\n",new Date()); // 13 (两位数字的日(前面补0))
System.out.printf("%te\n",new Date()); // 13 (两位数字的日(前面不补0))
System.out.printf("%tA\n",new Date()); // Wednesday (星期几的完整拼写)
System.out.printf("%ta\n",new Date()); // Wed (星期几的缩写)
System.out.printf("%tj\n",new Date()); // 013 (三位数的年中的日子(前面补0),在001到366之间)
System.out.printf("%tH\n",new Date()); // 18 (两位数字的小时(前面补0),在0到23之间)
System.out.printf("%tk\n",new Date()); // 18 (两位数字的小时(前面不补0)在0到23之间)
System.out.printf("%tI\n",new Date()); // 06 (两位数字的小时(前面补0),在0到12之间)
System.out.printf("%tl\n",new Date()); // 6 (两位数字的小时(前面不补0),在0到12之间)
System.out.printf("%tM\n",new Date()); // 51 (两位数字的分钟(前面补0))
System.out.printf("%tS\n",new Date()); // 28 (两位数字的秒(前面补0))
System.out.printf("%tL\n",new Date()); // 886 (三位数字的毫秒(前面补0))
System.out.printf("%tN\n",new Date()); // 886000000 (九位数字的毫微秒(前面补0))
System.out.printf("%tp\n",new Date()); // pm (上午或者下午的小写标志)
// System.out.printf("%tP\n",new Date());//此方法报错 应该和时区有关系
System.out.printf("%tz\n",new Date()); // +0800 (从GMT起,RFC822数字移位)
System.out.printf("%tZ\n",new Date()); // CST (时区)
System.out.printf("%ts\n",new Date()); // 1452682288 (从格林威治时间1970-01-01 00:00:00起的秒数)
System.out.printf("%tQ\n",new Date()); // 1452682288886 (从格林威治时间1970-01-01 00:00:01起的毫秒数)

/** 高级输出时间格式 **/
String fullDate = String.format("%1$s%2$tY-%2$tm-%2$td %2$tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
String fullDate2 = String.format("%s%tY-%<tm-%<td %<tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
String fullDate3 = String.format("%s%tF %<tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
System.out.println(fullDate);
System.out.println(fullDate2);
System.out.println(fullDate3);
}

如果参数超过一个,那就必须在 % 后面指定参数的索引,并以 $ 终止。

还可以使用 < 标志, 这样就不用使用索引来指定位置了。

是不是很方便呢?

目录
打赏
0
0
0
0
16
分享
相关文章
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
53 17
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
43 13
|
5月前
|
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
183 83
|
5月前
|
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
131 60
|
5月前
|
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
93 26
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
144 8
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
89 6
|
2月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
173 60
【Java并发】【线程池】带你从0-1入门线程池
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
73 23
|
30天前
|
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
101 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等