平常开发过程当中,我们可能会见到有的日期格式是这样的。
1、2022-12-21T12:20:16+08:00
2、2022-12-21T12:20:16.000+0800
3、2022-12-21T12:20:16.000+08:00
下面来说一下这种时间格式怎么转换
第一种:2022-12-21T12:20:16+08:00
代码如下:
 public static void main(String[] args) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = "2022-12-21 12:20:16";
        Date date = dateFormat.parse(dateStr);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        String format = sdf.format(date);
        System.out.println(format);
    }
第二种:2022-12-21T12:20:16.000+0800
代码如下:
public static void main(String[] args) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = "2022-12-21 12:20:16";
        Date date = dateFormat.parse(dateStr);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String format = sdf.format(date);
        System.out.println(format);
    }
第三种:2022-12-21T12:20:16.000+08:00
代码如下
 public static void main(String[] args) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = "2022-12-21 12:20:16";
        Date date = dateFormat.parse(dateStr);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        String format = sdf.format(date);
        System.out.println(format);
    }
上面三种都是用 SimpleDateFormat 实现的。SimpleDateFormat不是线程安全的。
 因此,我们可以用DateTimeFormatter ,这是线程安全的。
 并且DateTimeFormatter 是java8当中引入的,比前者更加灵活。你值得拥有。
public static void main(String[] args) {
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
        DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        LocalDateTime now = LocalDateTime.now();
        // 2023-07-29T14:43:57.431+0800
        String value1 = now.atZone(ZoneId.systemDefault()).format(formatter1);
        System.out.println(value1);
        // 2023-07-29T14:43:57+08:00
        String value2 = now.atZone(ZoneId.systemDefault()).format(formatter2);
        System.out.println(value2);
        // 2023-07-29T14:58:12.023+08:00
        String value3 = now.atZone(ZoneId.systemDefault()).format(formatter3);
        System.out.println(value3);
    }
为什么说DateTimeFormatter是线程安全的?
 这里附上部分源码。
 DateTimeFormatter类 以及内部的常量 都是使用final关键字修饰的,是不可变的。
 








![c++学习(c++11)[24]](https://img-blog.csdnimg.cn/1531e1227c704464a0d385f1a3af204b.png)










