LoginSignup
1
1

More than 5 years have passed since last update.

org.joda.time.DateTimeをISO8601形式でJSONにシリアライズするとミリ秒が付いてくる

Last updated at Posted at 2016-12-16
// Groovy Version: 2.4.5 JVM: 1.8.0_77 Vendor: Oracle Corporation OS: Mac OS X
@Grab('com.fasterxml.jackson.core:jackson-core:2.8.5')
@Grab('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.8.5')

@Grab('joda-time:joda-time:2.9.6')

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.util.ISO8601DateFormat
import com.fasterxml.jackson.datatype.joda.JodaModule
import org.joda.time.DateTime

def now = new DateTime()
def bean = new Bean(date1: now.toDate(), date2: now)

def objectMapper = new ObjectMapper()
        .registerModule(new JodaModule())
        .setDateFormat(new ISO8601DateFormat())

def json = objectMapper.writeValueAsString(bean)
println json



class Bean {
    Date date1
    DateTime date2
}

結果

{
  "date1": "2016-12-23T06:33:01Z",
  "date2": "2016-12-23T06:33:01.045Z"
}

java.util.Date であるdate1の方はミリ秒は付いていない。
ちゃんと @com.fasterxml.jackson.annotation.JsonFormat で整形する必要がありそう。

おまけ

def objectMapper = new ObjectMapper()
        .registerModule(new JodaModule())
//        .setDateFormat(new ISO8601DateFormat())
        .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)

上のような状態で試すとdate1にもミリ秒が付く。タイムゾーン指定子もZじゃなくて+0000に変わっちゃってるけど。。

{
  "date1": "2016-12-23T06:38:26.270+0000",
  "date2": "2016-12-23T06:38:26.270Z"
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1