版权声明:技术总结来自互联网,书籍,以及工作积累。如果觉得我的总结有帮助,欢迎分享。 https://blog.csdn.net/qq1332479771/article/details/85775440
背景
在做Java时间转化的时候,想获取时分秒,出现了一个bug,于是,对这了仔细研究下。
有BUG的写法
我获取时间的写法是这样的:
public static String getDatehhMMss(Date date){
DateFormat dateFormat = new SimpleDateFormat("hhMMss");//错误写法
//DateFormat dateFormat = new SimpleDateFormat("HHmmss");//正确写法
return dateFormat.format(date);
}
比如,现在时间是2019-01-04 14:28:30
我期望的结果是142830
,但是多次运行,发现结果结果一直不对,一直是020130
。
时间格式化的写法
查看源码,发现java.text.DateFormatSymbols
中有下面的写法:
static final int PATTERN_ERA = 0; // G
static final int PATTERN_YEAR = 1; // y
static final int PATTERN_MONTH = 2; // M
static final int PATTERN_DAY_OF_MONTH = 3; // d
static final int PATTERN_HOUR_OF_DAY1 = 4; // k
static final int PATTERN_HOUR_OF_DAY0 = 5; // H
static final int PATTERN_MINUTE = 6; // m
static final int PATTERN_SECOND = 7; // s
static final int PATTERN_MILLISECOND = 8; // S
static final int PATTERN_DAY_OF_WEEK = 9; // E
static final int PATTERN_DAY_OF_YEAR = 10; // D
static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F
static final int PATTERN_WEEK_OF_YEAR = 12; // w
static final int PATTERN_WEEK_OF_MONTH = 13; // W
static final int PATTERN_AM_PM = 14; // a
static final int PATTERN_HOUR1 = 15; // h
static final int PATTERN_HOUR0 = 16; // K
static final int PATTERN_ZONE_NAME = 17; // z
static final int PATTERN_ZONE_VALUE = 18; // Z
static final int PATTERN_WEEK_YEAR = 19; // Y
static final int PATTERN_ISO_DAY_OF_WEEK = 20; // u
static final int PATTERN_ISO_ZONE = 21; // X
同时,具体转换也可以看java.text.SimpleDateFormat#subFormat
的实现。