Johntk Johntk - 29 days ago 14
Java Question

Joda-Time: convert SimpleDateFormat pattern to DateTimeFormat.forPattern

I'm trying to modify some code to use

Joda-Time
rather than
java.sql.Timestamp


Currently the code is using
Threadlocal
and SimpleDateFormat:

public static final ThreadLocal<DateFormat> FORMAT_TIMESTAMP = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
}
};

public static String format(Timestamp timestamp) {
return FORMAT_TIMESTAMP.get().format(timestamp);
}


My understanding is that Joda-time is thread safe, so there is no need to use
ThreadLocal


With this in mind I have modified the code to this:

public static String format(Instant timestamp) {

Instant formated = Instant.parse(timestamp.toString(), DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX"));

return formated.toString();
}


If I nned to insert the values into a DB later in the code I plan to use this method.

Assuming I'm going about this the right way, is there anyway to format the
DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX")
like the

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")


At the moment I'm getting a
Invalid format
Exception

Answer

X is not recognised by Joda. Replacing the XXX by ZZ should do what you need.

Because DateTimeFormat is thread safe, you can share it across threads. So your code could look like this:

private static final DateTimeFormatter FORMAT_TIMESTAMP =
                                      DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");

public static String format(Instant timestamp) {
    return FORMAT_TIMESTAMP.print(timestamp);
}
Comments