Java Struts2日期解析

Java Struts2日期解析,java,struts2,datepicker,Java,Struts2,Datepicker,我有一个带有字段的表单,该表单使用日期/时间选择器,通过使用javascript生成一个隐藏字段,其中包含完整的日期和时间,格式为“英国”格式dd/MM/yy HH:MM。这将提交给struts2操作,该操作具有用于字段的getter和setter以及operation on java.util.Date 在JSP中: <s:form> ... <input type="hidden" name="myDate" value="08/05/11 16:00" />

我有一个带有字段的表单,该表单使用日期/时间选择器,通过使用javascript生成一个隐藏字段,其中包含完整的日期和时间,格式为“英国”格式dd/MM/yy HH:MM。这将提交给struts2操作,该操作具有用于字段的getter和setter以及operation on java.util.Date

在JSP中:

<s:form>

  ...
  <input type="hidden" name="myDate" value="08/05/11 16:00" />
  <s:submit />

</s:form>
正如在Firefox中所预期的那样,当我提交表单时,struts会自动解析日期,并且我在操作中得到一个日期对象,该对象具有正确的日期

然而,在谷歌浏览器中,当我提交表单时,日期被解析为美国格式MM/dd/yy HH:MM,因此我得到的是8月5日,而不是5月8日

检查两种浏览器发送的HTTP头显示,尽管我的操作系统语言设置为en_GB,但google chrome仍将“Accept language”头作为en_US发送,这意味着struts必须使用它来确定要使用的日期格式


我只能假设这是Google Chrome中的一个bug,但是考虑到我没有修复Google Chrome的自由,Struts 2中是否有一种方法可以指定一种固定日期格式,告诉Struts应该使用哪种格式来解析表单参数中的日期?

,以避免由不同的值引起的日期误解,我会使用一种明确且定义良好的方法来表示日期和时间。这就是标准所涵盖的内容

不幸的是,我认为Struts2无法转换为给定的“开箱即用”表示形式。对于日期转换,默认情况下


我想你可以尝试找到一个已经转换ISO 8601日期的插件,或者一个简单的方法就是转换。我建议使用它,它完全支持,并且有一个广泛的API用于地区、时区、转换等。我在所有应用程序(包括Struts 2)中的所有日期时间操作都使用它.

我已经为ISO标准创建了一个定制的TypeConverter,这有点令人失望,struts不允许您指定明确的格式,但TypeConverter解决了我的问题。您是否尝试过使用
request\u locale
参数设置为所需的语言?此参数设置会话变量WW_TRANS_I18N_LOCALE,对于我的应用程序,它覆盖“接受语言”设置语言。希望对你有帮助。。。
public class MyAction 
{

   public void setMyDate(Date d)
   {
      this.d = d;
   } 

   public Date getMyDate()
   {
      return d;
   }

}