3

Joda-Timeではなく、使用するコードを変更しようとしていますjava.sql.Timestamp

現在、コードはThreadlocalSimpleDateFormat を使用しています:

 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();
}

コードの後半で値を DB に挿入する必要がある場合は、この方法を使用する予定です。

私がこれを正しい方法で行っていると仮定すると、とにかく次のDateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX")ようにフォーマットすることはありますか

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

現時点ではInvalid format例外が発生しています

4

2 に答える 2

3

XJoda によって認識されません。XXXbyを置き換えると、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);
}
于 2015-12-17T15:37:53.433 に答える
1
于 2016-11-04T22:32:14.700 に答える