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);