Scala
lambda
java8

AWS Lambda上の時間やタイムゾーン

AWS Lambdaでプログラムを実行したタイムゾーンなど

Lambdaで日本時間に合わせてバッチを実行させたい時などどうすればよいか試してみた

テストコード

test.scala
  def handler(inputStream: InputStream, outputStream: OutputStream, context: Context): Unit = {
    //DateTime.now().getZone.getID()
    context.getLogger.log(s"DateTime.now().getZone.getID() : ${DateTime.now().getZone.getID()}")

    //DateTime.now()
    context.getLogger.log(s"DateTime.now() : ${DateTime.now()}")

    //DateTime.now(DateTimeZone.forID("Asia/Tokyo"))
    context.getLogger.log(s"""DateTime.now(DateTimeZone.forID("Asia/Tokyo")) : ${DateTime.now(DateTimeZone.forID("Asia/Tokyo"))}""")

    //LocalDate.now
    context.getLogger.log(s"LocalDate.now : ${LocalDate.now}")

    //LocalDate.now(DateTimeZone.forID("Asia/Tokyo"))}
    context.getLogger.log(s"""LocalDate.now(DateTimeZone.forID("Asia/Tokyo")) :  ${LocalDate.now(DateTimeZone.forID("Asia/Tokyo"))}""")

    //LocalDateTime.now
    context.getLogger.log(s"LocalDateTime.now : ${LocalDateTime.now}")

    //LocalDateTime.now(DateTimeZone.forID("Asia/Tokyo"))}
    context.getLogger.log(s"""LocalDateTime.now(DateTimeZone.forID("Asia/Tokyo")) :  ${LocalDateTime.now(DateTimeZone.forID("Asia/Tokyo"))}""")
  }

日本時間の2017/07/08 20:14頃に実行した
日本時間を前提としてプログラムを組む場合はDateTime.now(DateTimeZone.forID("Asia/Tokyo"))として取得するのがよさそう

DateTime.now().getZone.getID() : UTC

DateTime.now() : 2017-07-08T11:14:20.798Z

DateTime.now(DateTimeZone.forID("Asia/Tokyo")) : 2017-07-08T20:14:20.938+09:00

LocalDate.now : 2017-07-08

LocalDate.now(DateTimeZone.forID("Asia/Tokyo")) : 2017-07-08

LocalDateTime.now : 2017-07-08T11:14:20.941

LocalDateTime.now(DateTimeZone.forID("Asia/Tokyo")) : 2017-07-08T20:14:20.942