开发手册 欢迎您!
软件开发者资料库

Java 使用SimpleDateFormat和DateTimeFormatter格式化日期时间的方法及示例代码

本文主要介绍Java中,使用SimpleDateFormat和DateTimeFormatter的方法来格式化日期和时间的方法,以及实现的示例代码。

1、SimpleDateFormat和DateTimeFormatter用法及区别

使用SimpleDateFormat,应该只格式化旧的日期时间类型,如java.util.Date。需要格式化java.time日期时间类型,需要使用DateTimeFormatter

Java8的DateTimeFormatter是线程安全的,而SimpleDateFormat不是线程安全。

1)SimpleDateFormat的使用

//第一种用法public static String formatDate(Date date) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); }//第二种用法private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String formatDate(Date date) throws ParseException { synchronized(sdf) { return sdf.format(date); } }//第三种用法(推荐)//可以使用ThreadLocal来限制SimpleDateFormat只能在线程内共享,避免了多线程导致的线程安全问题。较好的解决并发问题private static ThreadLocal threadLocal = new ThreadLocal() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } };public static String format(Date date) { return threadLocal.get().format(date); }

2)SimpleDateFormat的使用

//解析日期String dateStr= "2021年10月14日"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");   LocalDate date= LocalDate.parse(dateStr, formatter);//日期转换为字符串LocalDateTime now = LocalDateTime.now(); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 hh:mm a"); String nowStr = now .format(format);

2、SimpleDateFormat和DateTimeFormatter格式化日期时间

import java.time.LocalDate;import java.time.Period;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;import java.util.Random;public class Main {    public static void main(String[] args) {        System.out.println(generateRandomDateAndTimeInString());    }    public static String generateRandomDateAndTimeInString() {        LocalDate date = LocalDate.now().minus(Period.ofDays((new Random().nextInt(365 * 70))));        System.out.println("date and time :: " + date.toString());        return formatDate(date);    }    public static String formatDate(LocalDate date) {        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");        // return date.atStartOfDay().atOffset(ZoneOffset.UTC).toString();        return date.atStartOfDay().atOffset(ZoneOffset.UTC).format(dtf);    }}

或者

import java.time.LocalDate;import java.time.Period;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;import java.util.Random;public class Main {    public static void main(String[] args) {        System.out.println(generateRandomDateAndTimeInString());    }    public static String generateRandomDateAndTimeInString() {        LocalDate date = LocalDate.now().minus(Period.ofDays((new Random().nextInt(365 * 70))));        System.out.println("date and time :: " + date.toString());        return formatDate(date);    }   public static String formatDate(LocalDate date) {    Date utilDate = Date.from(date.atStartOfDay(ZoneOffset.UTC).toInstant());    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");    return dateFormat.format(utilDate);   }}