4

从我在自动生成的application.conf文件中可以看到的,Play Framework 2.2中的日期/时间根据该文件中的date.format的定义格式化。我有,例如,定义在Play Framework 2.2中使用语言环境的日期格式

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

这些值,但是,似乎在印刷模板斯卡拉日期时,必须由框架忽略。 This线程给出了一个解决方案,其中一个人将模式直接输入到模板中作为myDate.format("yyyy-MM-dd")。 (如果使用Jodatime,我猜这会变成myDate.toDate().format("yyyy-MM-dd"),因为在DateTime类中没有定义format()。)但是,这不仅会迫使人们在每次显示日期时重复该模式,还会忽略当前的语言环境。

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

+0

使用joda-time(http://joda-time.sourceforge.net/quickstart.html)?他们有很多很好的内置格式化器。 – Ashalynd

+0

我已经在使用Jodatime。问题依然存在。 – plade

+0

我不确定Play是否可以接受设置值中的空格。在你的情况下,我可能只是制作一个采用日期和区域设置的方法,并做你想要的。 – Ashalynd

回答

7

总之,如果你想硬编码的语言环境使用JodaTime:

@(date: org.joda.DateTime) 
@import java.util.Locale 
@date.format("yyyy-MMM-dd", new Locale("sv", "SE")) 
如果你想要使用浏览器郎头选择的语言环境(你还需要隐式地请求

您的模板):

@(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/

+0

如何在Java 8中使用LocalDateTime而不是JodaTime?谢谢 – Way

1

我发现这个在这里Google group(我自己没有功劳,但我认为它可以帮助别人)

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

@import org.joda.time.format.DateTimeFormat 

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

或者你可以有这个

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

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

@utils.Format.dateFormatter.print(myDate) 

对我来说效果很好

相关问题