首页 > 其他分享 >SimpleDateFormat和DateTimeFormatter

SimpleDateFormat和DateTimeFormatter

时间:2023-04-29 12:04:27浏览次数:42  
标签:String SimpleDateFormat println DateTimeFormatter LocalDateTime Date

SimpleDateFormat和DateTimeFormatter都是进行日期时间格式化的工具类,后者是为jdk1.8以后的日期对象服务的,它没有线程安全的问题;而前者,是存在多线程下的安全隐患的。

作用

  1. 将日期格式化成日期/时间字符串
  2. 从给定字符串的开始解析文本以生成日期
  3. SimpleDateFormat是针对java.util.date和java.sql.date进行操作
  4. DateTimeFormatter是针对jdk1.8新增日期API进行转换操作

SimpleDateFormat格式化和解析日期

  1. 格式化(从Date到String)
public final String format(Date date):将日期格式化成日期/时间字符串
  1. 解析(从String到Date)
public Date pase(String source):从给定字符串的开始解析文本以生成日期
  1. 具体代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {
        //格式化:从Date到String
        Date d = new Date();//获取当前系统的时间
 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String s = sdf.format(d);
        System.out.println(s);
        System.out.println("--------");
 
        //解析:从String到Date
        String ss = "2022-03-20 20:20:20";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dd = sdf2.parse(ss);
        System.out.println(dd);
    }
}

DateTimeFormatter格式化和解析日期

  1. ofPattern解析到日期对象
  2. format格式化成字段符
  3. 具体代码
public class Test10 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //格式化类:DateTimeFormatter
        //方式一:预定义的标准格式。如: ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;IS0_LOCAL_TIME
        DateTimeFormatter df1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //df1就可以帮我们完成LocalDateTime和String之间的相互转换:
        //LocalDateTime-->String:
        LocalDateTime now = LocalDateTime.now();
        String str = df1.format(now);
        System.out.println(str);//2020-06-15T15:02:51.29
        //String--->LocalDateTime
        TemporalAccessor parse = df1.parse("2020-06-15T15:02:51.29");
        System.out.println(parse);
        //方式二:本地化相关的格式。如: oflocalizedDateTime()
        //参数:FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT
        //FormatStyle.LONG :2020年6月15日 下午03时17分13秒
        //FormatStyle.MEDIUM: 2020-6-15 15:17:42
        //FormatStyle.SHORT:20-6-15 下午3:18
        DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
        //LocalDateTime-->String:
        LocalDateTime now1 = LocalDateTime.now();
        String str2 = df2.format(now1);
        System.out.println(str2);
        //String--->LocalDateTime
        TemporalAccessor parse1 = df2.parse("20-6-15 下午3:18");
        System.out.println(parse1);
        //方式三: 自定义的格式。如: ofPattern( "yyyy-MM-dd hh:mm:ss") ---》重点,以后常用
        DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //LocalDateTime-->String:
        LocalDateTime now2 = LocalDateTime.now();
        String format = df3.format(now2);
        System.out.println(format);//2020-06-15 03:22:03
        //String--->LocalDateTime
        TemporalAccessor parse2 = df3.parse("2020-06-15 03:22:03");
        System.out.println(parse2);
    }
}

如果使用SimpleDateFormat想做到线程安全,则可以使用ThreadLocal来实现

private static final ThreadLocal<SimpleDateFormat> dateTimeFormatThreadLocal = ThreadLocal
            .withInitial(() -> new SimpleDateFormat(DEFAULT_DATE_FORMAT));

作者:仓储大叔,张占岭,

标签:String,SimpleDateFormat,println,DateTimeFormatter,LocalDateTime,Date
From: https://blog.51cto.com/u_15765017/6236696

相关文章

  • SimpleDateFormat并发引发的multiple points 异常以及解决
    SimpleDateFormat并发引发的multiplepoints异常以及解决一、问题分析SimpleDateFormat并发会出现如下问题:1、java.lang.NumberFormatException:multiplepoints 2、 java.lang.NumberFormatException:emptyString 3、java.lang.NumberFormatException:Forinputs......
  • java的DateFormat、SimpleDateFormate类源码的详解
    java的DateFormat、SimpleDateFormate类源码的详解抽象类Format的定义publicabstractclassFormatimplementsSerializable,Cloneable{privatestaticfinallong......
  • 【多线程】高并发之——SimpleDateFormat类的线程安全问题和解决方案
    关于SimpleDateFormat熟悉Java的同学知道这个类是线程不安全的,但究竟是怎样不安全法,什么原因产生的线程不安全?估计未必全部人都能够答得上来(我也不能,emmmm)呃,想更好地......
  • SimpleDateFormat类
    importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassDemo01{publicstaticvoidmain(String[]args)throw......
  • API(SimpleDateFormat)
    SimpleDateFormat的作用:可以格式化,把时间变成我们喜欢的类型,还可以解析,把字符串表示的时间变成Date对象public  SimpleDateFormat()默认格式public  SimpleDateForm......
  • SimpleDateFormat的线程安全问题和ThreadLocal的使用
     在项目中遇到了用的同一个静态sdf 两个接口同时触发 用的同一个sdf 会出现线程安全的问题。   文章资料转载SimpleDateFormat的线程安全问题和ThreadLocal......
  • 日期类 Date/SimpleDateFormat
    日期类publicclassDateTest{publicstaticvoidmain(String[]args)throwsParseException{//TODO常见类和对象//Date:日期类//......
  • SimpleDateFormat
    SimpleDateFormatSimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。进行格式化(日期→>文本)、解析(文本-〉日期)。常用的时间模式字母impo......
  • Java重点 | DateFormat和SimpleDateFormat类
    DateFormat和SimpleDateFormat类DateFormat类和它的子类SimpleDateFormat,后者是前者的子类,所以它有父类的format和parse方法。java.text.DateFormat:是日期/时间格式化......
  • DateTimeFormatter日期格式化
    DateTimeFormatter日期格式化​​DateTimeFormatter​​​​工具类​​DateTimeFormatter使用旧的Date对象时,我们用SimpleDateFormat进行格式化显示。使用新的LocalDateTime......