【发布时间】:2020-03-08 11:55:42
【问题描述】:
我在 Java 中使用 SimpleDateFormat,由于某种原因它没有检测到月份。这是我的代码:
/**
* Takes a date/time stamp which looks like yyyyMMDDhhmmss on converts it to
* yyyy-MM-DDThh:mm:ssZ
*
* @param timestamp
* @return
*/
public static String ConvertDate(String timestamp) {
if (timestamp == null || timestamp.length() < 14)
return null;
String timeString = null;
System.out.println(timestamp);
DateFormat outputFormat = new SimpleDateFormat("YYYY-MM-DD'T'hh:mm:ss'Z'");
DateFormat inputFormat = new SimpleDateFormat("yyyyMMDDhhmmss");
try{
Date date = inputFormat.parse(timestamp);
timeString = outputFormat.format(date);
}
catch(Exception e){}
return timeString;
}
调用此方法:ConvertDate("20190803122424") 返回以下内容:2019-01-03T12:24:24Z 而我想返回:2019-08-03T12:24:24Z
我的输出格式有问题吗?
【问题讨论】:
-
你试过把“yyyyMMDDhhmmss”改成“yyyyMMddHHmmss”(小写D,大写H)吗?
-
值得注意的是,在这种情况下调用
setLenient(false)会导致parse抛出异常。 -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的OffsetDateTime和DateTimeFormatter。 -
不仅您的输入格式,您的输出格式模式字符串也有几个错误大小写的模式字母实例。此外,带引号的
'Z'必然会给您带来不正确的结果。
标签: java simpledateformat date-format