Я столкнулся со странной проблемой с привязкой Grails 3 раза. У меня есть простой домен следующим образом
import java.sql.Time
class Marathon {
String name
String location
Time startTime
static constraints = {
}
}
В начальной загрузке я установил часовой пояс по умолчанию для США / горы
TimeZone.setDefault(TimeZone.getTimeZone("US/Mountain"))
Вот пользовательский конвертер данных, который конвертирует время
import grails.databinding.converters.ValueConverter
import java.text.SimpleDateFormat
class TimeConverter implements ValueConverter {
static final String TIME_FORMAT = "h:mm a"
boolean canConvert(value) {
value instanceof String
}
def convert(value) {
def timeZone = TimeZone.getTimeZone('US/Mountain')
def formatter = new SimpleDateFormat(TIME_FORMAT.replace('yyyy', 'yy'))
if (timeZone) formatter.setTimeZone(timeZone)
return new java.sql.Time(formatter.parse(value).getTime())
}
Class<?> getTargetType() {
java.sql.Time
}
}
Вот проблема.
В базе данных время хранится правильно. т.е. когда я сохраняю запись с 10:00 утра как параметр времени, она сохраняется в базе данных как 10: 00: 00
Но когда я извлекаю запись и отображаю время, отображается отображаемое время 21:30:00, то есть 9:30 вечера, что неверно. Что вызывает это автоматическое преобразование времени? Я ценю любую помощь. Я использую Grails 3.3.8.