Det här var enklare än vi hade förväntat oss.
Först i application.conf
, konfigurera JDBC URL med parametrarna som beskrivs i en annan StackOverflow-fråga
:
# Set MySQL Connector/J to use UTC server connection and time conversions
# see https://stackoverflow.com/questions/10488529/gettimestamp-does-timezone-converstion-twice-in-mysql-jdbc-connector
db.default.url="jdbc:mysql://localhost/database?useGmtMillisForDatetimes=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useTimezone=true&serverTimezone=UTC"
För det andra, i Build.scala
, ställ in Java-systemegenskapen och standard:
// Setting this property here forces the JVM to run in UTC time,
// both for test (`play test`) and development (`play start`) modes,
// but not for production (`play dist`).
System.setProperty("user.timezone", "GMT")
TimeZone.setDefault(TimeZone.getTimeZone("GMT"))
Dessa två ändringar tillsammans kommer att hantera båda test (play test
) och utveckling (play start
) lägen.
För produktion (play dist
), måste man fortfarande ställa in egenskapen innan lansering. Till exempel av:
- Redigera den genererade
start
skript för att lägga tillexport _JAVA_OPTIONS=-Duser.timezone=GMT
- Anropar
start
skript med-Duser.timezone=GMT
- Lansering inom en befintlig JVM efter anrop av
System.setProperty("user.timezone", "GMT")