Playframework 2.0 如何处理游戏中的多时区和本地时间/日期

Playframework 2.0 如何处理游戏中的多时区和本地时间/日期,playframework-2.0,jodatime,Playframework 2.0,Jodatime,我在多时区和/或本地约会方面没有太多经验,所以我对这件事很感兴趣,但我不知道如何开始,也不知道从哪里开始,所以请温柔地对待我:-) 我有两种类型的日期(时间)字段: 日期(存储日期、月份和年份) 日期时间(与1相同,但包括时间) 我应该如何定义游戏中的属性 @Formats.DateTime(pattern="MM-dd-yyyy") public Date reqCompletionDate; 或者我应该使用JodaTime(以前从未使用过): 如果我选择java.util.Date,如

我在多时区和/或本地约会方面没有太多经验,所以我对这件事很感兴趣,但我不知道如何开始,也不知道从哪里开始,所以请温柔地对待我:-)

我有两种类型的日期(时间)字段:

  • 日期(存储日期、月份和年份)
  • 日期时间(与1相同,但包括时间)
  • 我应该如何定义游戏中的属性

     @Formats.DateTime(pattern="MM-dd-yyyy")
     public Date reqCompletionDate;
    
    或者我应该使用JodaTime(以前从未使用过):

    如果我选择
    java.util.Date
    ,如何将其转换为用户本地
    日期格式(即yyyy-MM-dd)?自动绑定会因为格式问题而失败,所以我需要为它创建一个自定义绑定器?这将影响我所有的
    日期
    字段,对吗

    或者建议对所有日期(时间)字段使用getter和setter,这样我就可以传递用户
    Locale
    以获得正确的时间。在这种情况下,自动绑定播放将失败,并且我仍然需要一个用于
    Date
    DateTime
    的自定义绑定器

    还是我想得太多了,应该用不同的方式来处理?谢谢你的想法

    UPDATE: 2012-07-23: I think I will follow these steps:
    
    步骤1:开始播放并使用UTC时区初始化

    步骤2:根据UTC时区,使所有日期时间字段的格式相同

    步骤3:尽可能晚地转换为用户本地时间


    当用户发布包含
    本地日期(时间)
    的表单时,请尽快将其转换为UTC时间。如果我有时间,我会在这里发布我的代码。

    简而言之,使用JodaTime。应该将java.util.Date放在一个安静的字段中,给它最后一支烟,然后开枪

    较长的版本:

    多语言环境可能很复杂,要想正确使用它,不仅仅需要在用户的时区中显示日期和时间

    您需要考虑的事项的一些示例:

    • 在澳大利亚时区渲染时,您的生日是否提前一天
    • 如果用户告诉支持人员它发生在星期二,但是支持人员的星期二是+7小时,他会在日志中找到它吗
    • 17号的大减价定在哪个午夜开始
    java.util.Date仅限于表示时间上的单个瞬间。这使得我们很难应对这种情况。你甚至不能通过检查一个来判断它是代表一个日期还是一个日期时间

    Joda为这些单独的概念提供了单独的类型,这使得使用它们更加简单。例如,LocalDate没有时区或时间组件。您的生日是一个LocalDate,因此它永远不会更改,DateTimes表示为不同的类型。还有其他概念的类型,如间隔、持续时间,这使得时间/日期比较更容易。在极少数情况下,您必须支持不使用公历的地区,您可以轻松地交换年表

    如果您使用的是JPA,那么Joda的适配器就存在并工作。此外,如果必须在其他地方使用,Joda也提供了与java.util.Date的互操作性

    UPDATE: 2012-07-23: I think I will follow these steps: