在Play Framework 2.2中使用区域设置进行日期格式设置

时间:2013-10-12 15:11:52

标签: java date playframework string-formatting playframework-2.2

根据我在自动生成的application.conf文件中看到的内容,Play Framework 2.2中的日期/时间根据该文件中date.format的定义进行格式化。例如,我已经定义了

date.format=yyyy-MM-dd
date.format.dk=d. MMMM yyyy

但是,在Scala模板中打印日期时,框架似乎忽略了这些值。 This线程提供了一个解决方案,其中一个人将模式直接输入模板myDate.format("yyyy-MM-dd")。 (如果使用Jodatime,我猜这会变成myDate.toDate().format("yyyy-MM-dd"),因为在format()类上没有定义DateTime。)但这不仅强制每次显示日期时重复模式,它也忽略了当前的语言环境。

那么在Play Framework 2.2.x中针对不同语言环境设置日期和时间格式的预期方法是什么?

2 个答案:

答案 0 :(得分:7)

简而言之,如果你想硬件编码语言环境使用JodaTime:

@(date: org.joda.DateTime)
@import java.util.Locale
@date.format("yyyy-MMM-dd", new Locale("sv", "SE"))

如果您想使用从浏览器lang标题中选择的区域设置(您还需要隐式地向模板请求):

@(date: org.joda.DateTime)(implicit lang: play.api.i18n.Lang)
@date.format("yyyy-MMM-dd", lang.toLocale)

我写了一篇关于此的详细博客文章(因为我已经多次看过这个问题):

https://markatta.com/codemonkey/blog/2013/10/14/formatted-localized-dates-in-playframework-2/

答案 1 :(得分:1)

我在这里发现Google group(我对此没有任何赞誉,但我认为它可以帮助某人)

WebView.setWebChromeClient()

或者你可以拥有这个

@(myDate: org.joda.time.DateTime)

@import org.joda.time.format.DateTimeFormat

@defining(DateTimeFormat.forPattern("yyyy-MM-dd")) { dateFormatter =>
    @dateFormatter.print(myDate) )
}

并在模板中调用它(假设它以utils和Object Format存储):

val dateFormatter = org.joda.time.format.DateTimeFormat.forPattern(myDatePattern)

对我来说效果很好