SimpleDateFormat奇怪的parse结果

代码如下:

  public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
            System.out.println( simpleDateFormat.format( simpleDateFormat.parse("2018-08-11 15") ) );
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

输出如下:

20171207232600

求大神解释

我运行程序,得到的数字是20171207230115
原时间是2018-08-11 15 按照给定时间格式"yyyyMMddHHmmss"分析源码
根据yyyy解析年 2018, 结果 2018;
根据MM解析月-0,结果是0,也就是12,年份减一,月份为12
根据dd解析日8,结果是8
根据HH解析时-1,结果是-1,日减一,时为23
根据mm解析分钟1,结果是1
根据ss解析秒' 15',结果是15,这里会忽略空格和\t
最终得到的时间是2017年12月7日 23时1分15秒

和你的结果不同,可能是时区不一样,详细可以看SimpleDateFormat.parse的过程

应该是用yyyyMMddHHmmss去解析2018-08-11 15解析出来的时间有误差了吧,解析的得和你传入的时间字符串格式一样啊

你的格式不匹配,这个就不好说了,要看源代码层面是怎么实现的。猜测是-08是不是被当作了月份,所以反转到上一年了。

"yyyyMMddHHmmss"格式跟"2018-08-11 15"不同

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH");
Date date = simpleDateFormat1.parse("2018-08-11 15");
System.out.println(simpleDateFormat.format(date));

输出:20180813150000

大哥simpleDateFormat.parse("2018-08-11 15")你这个传值是无效格式当然解析行为会不对不对,你定义的是yyyyMMddHHmmss格式而
2018-08-11 15属于yyyy-MM-dd HH

"yyyyMMddHHmmss" 对应 20180813155312 这样的
"2018-08-11 15"对应yyyy-MM-dd HH
要么改前面,要么改后面

或者我就想知道,格式不对,为什么不报异常,而是解析出了一个错误的结果

import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.logging.Level;  
import java.util.logging.Logger;  

public class CSDN {  

    public static void main(String[] args) {  
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH");  
        try {  
            System.out.println( simpleDateFormat.format( simpleDateFormat.parse("2018-08-11 15") ) );  
        } catch (ParseException ex) {  
            Logger.getLogger(CSDN.class.getName()).log(Level.SEVERE, null, ex);  
        }  
    }  
    /* 
    run: 
    2018-08-11 15 
    成功构建 (总时间: 0 秒) 
    */  
}