参考官方文档:
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat类允许的字符
static final String patternChars = “GyMdkHmsSEDFwWahKzZYuXL”;
字符解释:
Letter | Date or Time Component | Presentation | Examples |
---|---|---|---|
G | Era designator | Text | AD |
y | Year | Year | 1996; 96 |
Y | Week year | Year | 2009; 09 |
M | Month in year | Month | July; Jul; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday; Tue |
u | Day number of week (1 = Monday, …, 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
X | Time zone | ISO 8601 time zone | -08; -0800; -08:00 |
示例一:
dateStr: 2017-10-19 11:16:00.083+08:00
pattern: yyyy-MM-dd HH:mm:ss.SSSX
解释:
S=毫秒 .SSS代表秒后面的小数为83毫秒
X代表时区+08:00 即北京时间的11.16分
附上线程安全的SimpleDateFormat类
/**
* 线程安全的dataformat 避免了单线程内重复创建的开销
*/
public class ThreadLocalDateFormat {
private static final String ULOG_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSSX";
private static ThreadLocal<DateFormat> threadLocalDateFormat = new ThreadLocal<>();
public static DateFormat getUlogDateFormat() {
DateFormat dateFormat = threadLocalDateFormat.get();
if (dateFormat == null) {
dateFormat = new SimpleDateFormat(ULOG_DATE_PATTERN);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
threadLocalDateFormat.set(dateFormat);
}
return dateFormat;
}
public static long getUlogTimestamp(String ulogDateStr) throws ParseException {
return getUlogDateFormat().parse(ulogDateStr).getTime();
}
}