【发布时间】:2015-12-17 15:32:19
【问题描述】:
我正在尝试修改一些代码以使用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")
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
目前我收到Invalid format 异常
【问题讨论】:
-
我不明白。在您的第一个示例中,您是
formattingTimestamp。在您的第二个示例中,您尝试将Timestamp#toString创建的String解析为Instant实例,然后返回Instant#toString结果(这可能与DateTimeFormat的格式不同。DateTimeFormat确实如此没有X模式字符。只需使用DateTimeFormat#print(timestamp.getTime())。我没有注意到timestamp在您的第二个示例中是Instant。Timestamp发生了什么? -
对不起,这是我犯的一个愚蠢的错误
标签: java jodatime thread-local sql-timestamp