Java SimpleDateFormat 未检测月份
Java SimpleDateFormat not detecting month
我在 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")
returns 以下内容:2019-01-03T12:24:24Z
而我想要 return:2019-08-03T12:24:24Z
我的输出格式有问题吗?
您使用了错误的日期格式字符串:DD
(年中的日期)而不是 dd
(月中的日期)。将两个 SimpleDateFormat
实例都更改为使用 dd
:
DateFormat inputFormat = new SimpleDateFormat("yyyyMMddhhmmss");
DateFormat outputFormat = new SimpleDateFormat("YYYY-MM-dd'T'hh:mm:ss'Z'");
因此你得到了错误的结果。
正如大家指出的那样,您的格式化程序 yyyyMMDDhhmmss
是错误的,因此请使用有效格式
创建 DateTimeFormatter
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
然后使用 java-8 日期时间 API 将其解析为 LocalDateTime
,然后使用 ZonedDateTime
将其解析为 UTC
格式
String dateString = "20190803122424";
LocalDateTime localDateTime = LocalDateTime.parse(dateString,inputFormat);
然后可以转换成OffsetDateTime
OffsetDateTime outputDateTime = localDateTime.atOffset(ZoneOffset.UTC);
万一你特别想要ZonedDateTime
ZonedDateTime outputDateTime = localDateTime.atZone(ZoneOffset.UTC);
我在 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")
returns 以下内容:2019-01-03T12:24:24Z
而我想要 return:2019-08-03T12:24:24Z
我的输出格式有问题吗?
您使用了错误的日期格式字符串:DD
(年中的日期)而不是 dd
(月中的日期)。将两个 SimpleDateFormat
实例都更改为使用 dd
:
DateFormat inputFormat = new SimpleDateFormat("yyyyMMddhhmmss");
DateFormat outputFormat = new SimpleDateFormat("YYYY-MM-dd'T'hh:mm:ss'Z'");
因此你得到了错误的结果。
正如大家指出的那样,您的格式化程序 yyyyMMDDhhmmss
是错误的,因此请使用有效格式
DateTimeFormatter
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
然后使用 java-8 日期时间 API 将其解析为 LocalDateTime
,然后使用 ZonedDateTime
UTC
格式
String dateString = "20190803122424";
LocalDateTime localDateTime = LocalDateTime.parse(dateString,inputFormat);
然后可以转换成OffsetDateTime
OffsetDateTime outputDateTime = localDateTime.atOffset(ZoneOffset.UTC);
万一你特别想要ZonedDateTime
ZonedDateTime outputDateTime = localDateTime.atZone(ZoneOffset.UTC);