3

我正在尝试修改一些代码以使用Joda-Time而不是java.sql.Timestamp

目前代码正在使用Threadlocal和 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);
}

我的理解是Joda-time是线程安全的,所以没必要使用ThreadLocal

考虑到这一点,我将代码修改为:

 public static String format(Instant timestamp) {

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

    return formated.toString();
}

如果我需要稍后在代码中将值插入数据库,我计划使用方法。

假设我以正确的方式进行此操作,是否有格式化之DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX")类的

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

目前我得到一个Invalid format例外

4

2 回答 2

3

X乔达不承认。更换XXXbyZZ应该做你需要的。

因为DateTimeFormat是线程安全的,所以可以跨线程共享。因此,您的代码可能如下所示:

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);
}
于 2015-12-17T15:37:53.433 回答
1
于 2016-11-04T22:32:14.700 回答