xxl-job
xxl-job copied to clipboard
DateUtil工具类格式化日子无法定制时区
private static final ThreadLocal<Map<String, DateFormat>> dateFormatThreadLocal = new ThreadLocal<Map<String, DateFormat>>();
private static DateFormat getDateFormat(String pattern) {
if (pattern==null || pattern.trim().length()==0) {
throw new IllegalArgumentException("pattern cannot be empty.");
}
Map<String, DateFormat> dateFormatMap = dateFormatThreadLocal.get();
if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){
return dateFormatMap.get(pattern);
}
synchronized (dateFormatThreadLocal) {
if (dateFormatMap == null) {
dateFormatMap = new HashMap<String, DateFormat>();
}
dateFormatMap.put(pattern, new SimpleDateFormat(pattern));
dateFormatThreadLocal.set(dateFormatMap);
}
return dateFormatMap.get(pattern);
}
直接使用new SimpleDateFormat(pattern),导致服务器时区和我们不一致时,无法按国内时间打印日志内容
修改建议 ` private static final ThreadLocal<Map<String, DateFormat>> dateFormatThreadLocal = new ThreadLocal<Map<String, DateFormat>>(); private static DateFormat getDateFormat(String pattern) { if (pattern==null || pattern.trim().length()==0) { throw new IllegalArgumentException("pattern cannot be empty."); }
Map<String, DateFormat> dateFormatMap = dateFormatThreadLocal.get();
if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){
return dateFormatMap.get(pattern);
}
synchronized (dateFormatThreadLocal) {
if (dateFormatMap == null) {
dateFormatMap = new HashMap<String, DateFormat>();
}
SimpleDateFormat bjSdf = new SimpleDateFormat(pattern); // 北京
bjSdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置北京时区
dateFormatMap.put(pattern, bjSdf);
dateFormatThreadLocal.set(dateFormatMap);
}
return dateFormatMap.get(pattern);
}`
指定为北京时区
这个不合理感觉,万一别人的服务同样部署在非北京时区的,且逻辑就是需要取当前服务器的时间呢?
这个感觉更适合做一个自行实现的逻辑,默认取本机,然后可定制时区的。
就不应该格式化,返回毫秒值