Home > Net >  Which type of date format it is?? "2018-09-06T10:12:21-0300"
Which type of date format it is?? "2018-09-06T10:12:21-0300"

Time:11-12

What type of date format is it?

"2018-09-06T10:12:21-0300"

And how can I format it to something like that "06 Sep" ???

CodePudding user response:

What type of date format is it?

This format is one of the ISO 8601 standard, but obviously not for the java.time.format.DateTimeFormatter which considers it a custom format consisting of ISO-standard date and time of day plus an offset from UTC without a separator (colon) between hours and minutes.

And how can I format it to something like that "06 Sep" ???

You need to define two DateTimeFormatters, one for parsing the non-standard input and the other one for outputting day of month and abbreviated month name only. Here's an example:

fun main(args: Array<String>) {
    // some non-ISO formatted String
    val inputDateTime = "2018-09-06T10:12:21-0300"
    // build up a DateTimeFormatter that can parse such a String
    val inputParser = DateTimeFormatterBuilder()
                        // date part uuuu-MM-dd
                        .append(DateTimeFormatter.ISO_LOCAL_DATE)
                        .appendLiteral('T') // the T separating date from time
                        // the time of day part
                        .append(DateTimeFormatter.ISO_LOCAL_TIME)
                        // the offset part without a separator between hours and minutes
                        .appendPattern("X")
                        // (just for completeness) a locale
                        .toFormatter(Locale.ENGLISH)
    // parse the String to an OffsetDateTime
    val offsetDateTime = OffsetDateTime.parse(inputDateTime, inputParser)
    // define another formatter for output, make it only use day of month and abbreviated month in English
    val outputFormatter = DateTimeFormatter.ofPattern("dd MMM", Locale.ENGLISH)
    // print the results
    println("$offsetDateTime ---> ${offsetDateTime.format(outputFormatter)}")
}

Example output:

2018-09-06T10:12:21-03:00 ---> 06 Sep

CodePudding user response:

This format respects the ISO 8601 standard for representing a date/time with timezone information.

There is enough information to parse this string into an OffsetDateTime, but apparently Java's formatter is a bit strict with respect to the missing separator between hours and minutes in the offset representation (which is technically allowed by the standard). This means a plain OffsetDateTime.parse(text) will throw an exception.

Therefore, you'll to define a custom DateTimeFormatter as explained by @deHaar.

  • Related