在Java中格式化日期时间是一个常见的需求,无论是显示给用户还是记录到日志中,Java提供了多种方式来实现这一功能,以下是一些常用的方法和步骤。

使用SimpleDateFormat类
SimpleDateFormat 是Java中处理日期和时间的常用类,它可以格式化日期和时间为字符串,也可以将字符串解析为日期。
1 格式化日期时间
以下是一个使用SimpleDateFormat格式化日期时间的例子:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateFormat.format(new Date());
System.out.println("Formatted Date: " + formattedDate);
}
}
在上面的例子中,"yyyy-MM-dd HH:mm:ss" 是一个日期时间的格式字符串,表示年份-月份-日期 小时:分钟:秒。
2 解析日期时间
SimpleDateFormat 也可以用来解析日期时间字符串:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = dateFormat.parse("2026-01-01 12:00:00");
System.out.println("Parsed Date: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
使用DateTimeFormatter类(Java 8及以上)
DateTimeFormatter 是Java 8引入的一个新的日期时间格式化类,它比SimpleDateFormat更安全,因为它是不可变的。
1 格式化日期时间
以下是一个使用DateTimeFormatter格式化日期时间的例子:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatExample {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = LocalDateTime.now().format(formatter);
System.out.println("Formatted Date: " + formattedDate);
}
}
2 解析日期时间
DateTimeFormatter 也可以用来解析日期时间字符串:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateFormatExample {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
try {
LocalDateTime date = LocalDateTime.parse("2026-01-01 12:00:00", formatter);
System.out.println("Parsed Date: " + date);
} catch (DateTimeParseException e) {
e.printStackTrace();
}
}
}
经验案例
假设我们有一个电商网站,需要记录用户的下单时间,我们可以在用户下单时使用DateTimeFormatter来格式化日期时间,并将其存储在数据库中:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class OrderProcessing {
public static void processOrder() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String orderTime = LocalDateTime.now().format(formatter);
// 假设这里是将orderTime存储到数据库
System.out.println("Order Time: " + orderTime);
}
}
在这个案例中,我们使用了DateTimeFormatter来确保所有记录的日期时间格式一致,便于后续的数据处理和分析。
FAQs
Q1: SimpleDateFormat和DateTimeFormatter哪个更好?
A1: DateTimeFormatter 更好,因为它是不可变的,这减少了潜在的安全风险,并且在多线程环境中使用更加安全。
Q2: 如何处理时区问题?

A2: Java 8引入了ZoneId和ZonedDateTime类来处理时区问题,你可以使用这些类来获取特定时区的当前时间或解析日期时间字符串:
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class TimeZoneExample {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = ZonedDateTime.now(zoneId);
System.out.println("Time in New York: " + zonedDateTime);
}
}
文献权威来源
《Java程序员修炼之道:核心技术》作者:秦小波,电子工业出版社
《Java并发编程实战》作者:Brian Goetz等,电子工业出版社


















