SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); String format = df.format(new Date()); System.out.println(format);//2018-01-24T09:17:19.993+08:00 SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); String format2 = df2.format(new Date()); System.out.println(format2);//2018-01-24T09:17:19+08:00 Date parse = df2.parse("2018-01-11T12:00:03+00:00"); System.out.println(parse);//Thu Jan 11 20:00:03 CST 2018
SimpleDateFormat线程安全问题
在使用SimpleDateFormat时常常会忽略掉一个问题,就是拿一个new的实例去转换多个时间,此时当发生高并发时,会发生转换出来的时间结果不是自己想要的。
解决办法就是要么给每一个转换时间的方法new一个自己的SimpleDateFormat实例,要么使用ThreadLocal。
private static final ThreadLocal<SimpleDateFormat> dateFormatter = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { // TODO Auto-generated method stub return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } };
String format = dateFormatter.get().format(new Date());