Ich möchte ein gespeichertes Datum anzeigen (Zeitzone ist UTC) mit der Zeitzone des Benutzers formatiert (kann für jeden Benutzer variieren und wird im Profil gespeichert).Der beste Weg zur benutzerspezifischen Datum/Zeitzone Konvertierung mit Spring MVC + Freemarker
Die Lösung, die ich kam, ist die folgende und Ich möchte wissen, ob dies der beste Weg ist, es zu tun, oder wenn es eine andere, vielleicht einfachere Lösung gibt.
Zeitzone auf UTC eingestellt mit:
-Duser.timezone=UTC
Controller Freemarker-Template, HandlerInterceptor:
Controller:
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping
public String dateTest(Model model){
final Date date = new Date();
model.addAttribute("formattedDate", new SimpleDateFormat("hh:mm:ss").format(date));
model.addAttribute("date", date);
return "test";
}
}
Freemarker-Vorlage:
<#setting time_zone="${currentTimeZone}">
UTC Time: ${formattedDate}<br/>
Localized time for timezone <i>${currentTimeZone}</i>: ${date?time}
HandlerInterceptor:
public class TimezoneHandlerInterceptor extends HandlerInterceptorAdapter{
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
//Only for testing, in production something like:
//final String currentUserTimezone = userService.getCurrentUser().getTimezoneId();
final String currentUserTimezone = "Europe/Berlin";
modelAndView.addObject("currentTimeZone", currentUserTimezone);
}
}
Ausgang:
UTC Time: 08:03:53
Localized time for timezone Europe/Berlin: 09:03:53
So ist es eine Standard oder sogar aus dem Kasten heraus Art und Weise das gleiche Ergebnis zu erzielen? Danke für Ihre Hilfe.
Vielen Dank für Ihre Antwort. Sie haben Recht, es ist nur ein Rendering-Problem und sollte nicht im Modell/Controller durchgeführt werden - das war nur für Demonstrationszwecke. Ich denke diese 'Template.createProcessingEnvironment' ist, was ich eigentlich gesucht habe. Spring MVC legt das Gebietsschema fest, aber ich habe nicht herausgefunden, wie man die Zeitzone auf die gleiche Weise einstellt - aber mit diesem Hinweis kann ich den Quellcode durchsehen und selbst die endgültige Lösung finden. –