java - Joda-Time : convert SimpleDateFormat pattern to DateTimeFormat. forPattern

标签 java jodatime thread-local sql-timestamp

我正在尝试修改一些代码以使用 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();
}

如果我想稍后在代码中将这些值插入到数据库中,我打算使用 this方法。

假设我正在以正确的方式解决这个问题,是否有像 DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX") 这样的格式/p>

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

目前我收到一个格式无效异常

最佳答案

X 无法被 Joda 识别。将 XXX 替换为 ZZ 应该可以满足您的需要。

因为 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);
}

关于java - Joda-Time : convert SimpleDateFormat pattern to DateTimeFormat. forPattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338338/

相关文章:

java - 如何将日期时间字符串输入转换为 Joda 日期时间中的格式化日期时间字符串

java - Play 框架——保证本地线程在请求​​结束或下一个请求开始时被清除

java - 在java中添加操作perfom并验证输入组件?

java - 在 java.lang.Object 类中使用 protected 方法的目的是什么?

spring - Joda 时间和 hibernate 4

java - 复制 joda LocalTime 的直接方法是什么?

java - Spring 安全 : How to get details from the principal?

java - 当不涉及与 'then..' 方法链接时,是否保证 CompletableFuture 排序?

java - ThreadLocal 和列表不起作用

c++ - `thread_local` 全局变量什么时候初始化?