在Java编程中,时间与字符串的转换操作非常常见。Java提供了丰富的API工具,如java.time包和SimpleDateFormat类,以简化这类操作的实现。本文通过实例演示如何高效完成日期与字符串的相互转换。
日期格式化为字符串
借助java.time包中的DateTimeFormatter类,可以灵活实现日期对象到字符串的转换。下面展示两种典型用法:
使用预定义格式
通过内置的ISO标准格式进行转换:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
String formattedDate = now.format(formatter);
System.out.println("ISO格式日期时间: " + formattedDate);
}
}
自定义格式
创建自定义格式模板来适配业务需求:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class CustomFormatExample {
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);
System.out.println("自定义格式日期时间: " + formattedDate);
}
}
字符串解析为日期
需确保字符串格式与解析器格式完全一致。以下是两种典型场景的实现:
解析ISO格式字符串
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class ParseISODateExample {
public static void main(String[] args) {
String isoDate = "2023-10-11T12:34:56";
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
LocalDateTime date = LocalDateTime.parse(isoDate, formatter);
System.out.println("解析后的日期时间: " + date);
}
}
解析自定义格式字符串
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class ParseCustomDateExample {
public static void main(String[] args) {
String customDate = "2023-10-11 12:34:56";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(customDate, formatter);
System.out.println("解析后的日期时间: " + date);
}
}
时区处理示例
通过ZonedDateTime类可实现跨时区日期转换:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class TimeZoneExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = ZonedDateTime.of(now, zoneId);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
String formattedDate = zonedDateTime.format(formatter);
System.out.println("纽约时区日期时间: " + formattedDate);
}
}
方法补充与经典案例
以下是关于时间到字符串转换的多样化实现方案:
使用传统SimpleDateFormat方法:
import java.util.Date;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) {
Date currentDate = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(currentDate);
System.out.println(dateString);
}
}
使用LocalDateTime类的现代写法:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeString = currentDateTime.format(formatter);
System.out.println(dateTimeString);
}
}
经典转换场景实现
- 时间戳转日期格式
- 字符串转Date对象
- 获取当前系统时间
- 仅输出时间部分
- 转换特殊格式字符串
import java.text.SimpleDateFormat;
import java.util.Date;
public class LongToString {
public static void main(String[] args) {
String time = "1256006105375";
Date date = new Date(Long.parseLong(time));
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
time = formatter.format(date);
System.out.println(time);
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) throws Exception {
String time = "2010-11-20 11:10:10";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(time);
System.out.println(date);
}
}
输出完整日期时间:
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) throws Exception {
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = formatter.format(date);
System.out.println(time);
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) throws Exception {
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String time = formatter.format(date);
System.out.println(time);
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) throws Exception {
String time = "20101125102503";
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
time = formatter2.format(formatter1.parse(time));
System.out.println(time);
}
}
总结
通过Java的java.time包和传统SimpleDateFormat,开发者可以轻松应对99%的日期转换需求。推荐使用java.time包的线程安全设计,尤其是处理国际化场景时。掌握日期格式化控制可以提升代码可读性,并规避时区偏移等常见错误,建议所有开发人员重点掌握这部分核心API。
Like (0)
