私はそのような文字列を持っています:
{
"debug":"false",
"switchTime":"2017-04-12 17:04:42.896026"
}
私はそのようなアプローチでオブジェクトを取得しようとしています:
new ObjectMapper().readValue(string, MyObject.class);
そしてMyObjectクラス:
class MyObject {
private Boolean debug;
private Timestamp switchTime;
//...getters, setters, constructors
}
私はそのような例外があります:
com.fasterxml.jackson.databind.exc.InvalidFormatException:
Can not deserialize value of type Java.sql.Timestamp from String
"2017-04-12 17:04:42.896026": not a valid representation (error:
Failed to parse Date value '2017-04-12 17:04:42.896026':
Can not parse date "2017-04-12 17:04:42.896026Z": while it seems
to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS'Z'',
parsing fails (leniency? null)) at [Source:
{"debug":"false", "switchTime":"2017-04-12 17:04:42.896026"};
理由がわかりません...「2017-04-12 17:04:42.896026」を使用してデバッグモードTimestamp.valueOf()で使用すると、成功します
以下に示すように、_@JsonFormat
_アノテーションを使用して期待される日付/時刻形式を設定する必要があると思います。
_class MyObject {
private Boolean debug;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
private Timestamp switchTime;
//...getters, setters, constructors
}
_
タイムゾーンを@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS",timezone="PST")
として設定することもできます
まず、タイムスタンプを文字列として取得し、次に目的のタイムスタンプパターンに変換します。
class MyObject {
private Boolean debug;
private String switchTime;
//...getters, setters, constructors
}
次のコードを使用して、文字列を目的のタイムスタンプ形式に変換します
try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date parsedDate = dateFormat.parse(switchTime);
Timestamp timestamp = new Java.sql.Timestamp(parsedDate.getTime());
}catch(Exception e){
}
デバッグモードで表示される値は、タイムスタンプの実際の値の「toString()」バージョンであるため、デバッグモードでの検査に依存しないでください。 @JsonFormatアノテーションを使用すると、タイムスタンプを指定した形式に変換できます。変換中もタイムゾーンに注意する必要があります!