I figured it out a bit, and one problem is that there is no default set TimeZonethat looks like an oversight; RequestContextUtils.getTimeZone(request)should return the server time zone if nothing is available.
This is easy enough to fix; add dependency injection in BootStrap.groovyfor the "localeResolver" bean and some code to set the default time zone in the resolver:
class BootStrap {
def localeResolver
def init = {
if (!localeResolver.defaultTimeZone) {
localeResolver.defaultTimeZone = TimeZone.getDefault()
// or hard-code to a known instance, e.g. TimeZone.getTimeZone('America/New_York')
}
}
}
TimeZone Spring; 2005 .
Grails LocaleResolver AcceptHeaderLocaleResolver ( TimeZone) SessionLocaleResolver. , , resolver ( null - Grails), , , request.getLocale(), Accept-Language. , - . , LocaleChangeInterceptor, "lang" Locale. .
-, . , , , , , LocaleResolver,
import org.springframework.web.servlet.i18n.SessionLocaleResolver
...
session[SessionLocaleResolver.TIME_ZONE_SESSION_ATTRIBUTE_NAME] =
TimeZone.getTimeZone(user.timeZoneId)
JavaScript TimeZone Ajax. . .