我对MultiTimeZone和/或当地日期的经验不多,所以我对此不屑一顾,但我不知道如何以及从哪里开始,所以请对我轻轻一点: - )
我有两种类型的日期(时间)字段:
如何在Play中定义我的属性?
@Formats.DateTime(pattern="MM-dd-yyyy")
public Date reqCompletionDate;
或者我应该选择JodaTime(之前从未使用过):
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
public DateTime reqCompletionDate;
如果我选择java.util.Date
,我该如何将其转换为本地用户Date format
(即yyyy-MM-dd)?由于格式问题,播放自动绑定将失败,因此我需要为它创建自定义绑定器?这会影响我的所有Date
字段,对吗?
或者您是否建议在所有日期(时间)字段中使用getter和setter,以便我可以通过用户Locale
来获取正确的时间。在这种情况下,Play的自动绑定将失败,我仍然需要Date
和DateTime
的自定义绑定?
或者我是否过度思考这一切并且应该以不同的方式处理这个问题?谢谢你的想法!
UPDATE: 2012-07-23: I think I will follow these steps:
第1步:开始播放并使用UTC时区初始化
第2步:根据UTC时区,使所有日期时间字段的格式相同
第3步:尽可能晚地转换为用户本地时间
当用户发布包含local date (time)
的表单时,请尽快将其转换为UTC时间。如果我有时间,我会在这里发布我的代码。
答案 0 :(得分:2)
简而言之,请使用JodaTime。 java.util.Date应该被带入一个安静的领域,给予最后一支香烟,然后开枪。
较长版本:
多区域设置可能很复杂,并且不仅仅是在用户的时区中显示日期和时间。
您需要考虑的一些事项示例:
java.util.Date仅限于表示单个瞬间。这使得很难应对这些场景。你甚至不能通过检查它是否代表日期或日期时间来判断。
Joda为这些独立的概念提供了单独的类型,这使得使用它们变得更加简单。例如,LocalDate没有时区或时间组件。您的生日是LocalDate,因此它永远不会更改,DateTimes表示为不同的类型。还有其他概念的类型,如Interval,Duration,这使得时间/日期比较更容易。在极少数情况下,您必须支持没有使用公历的区域设置,您可以轻松交换Chronologies。
如果您正在使用JPA,Joda的适配器存在并正常工作。如果你必须在别处使用它,Joda确实提供了与java.util.Date的互操作性。