Java 如何更改Struts2中的默认日期格式?
我正在开发一个多语言Struts2应用程序,我有很多操作都是处理Java 如何更改Struts2中的默认日期格式?,java,date,struts2,localization,internationalization,Java,Date,Struts2,Localization,Internationalization,我正在开发一个多语言Struts2应用程序,我有很多操作都是处理日历属性的。默认类型转换在大多数情况下都有效,但是在某些地区,我希望更改使用的默认格式 具体来说,我希望英语区域设置中的日期遵循yyyy-MM-dd格式。但是,这不起作用(奇怪的是,yyyy-MM-dd HH:MM工作得很好,但在这种情况下,我不希望有时间段),因为Struts2期望英语区域设置中的日期看起来不同 因此,我想更改转换的预期格式。我正在寻找一个明智的解决办法。我已经尝试过的选项包括: A) OwnStrutsType
日历
属性的。默认类型转换在大多数情况下都有效,但是在某些地区,我希望更改使用的默认格式
具体来说,我希望英语区域设置中的日期遵循yyyy-MM-dd
格式。但是,这不起作用(奇怪的是,yyyy-MM-dd HH:MM
工作得很好,但在这种情况下,我不希望有时间段),因为Struts2期望英语区域设置中的日期看起来不同
因此,我想更改转换的预期格式。我正在寻找一个明智的解决办法。我已经尝试过的选项包括:
- A) Own
。这应该可以工作,但我无法将StrutsTypeConverter
文件中指定的格式注入其中package.properties
- B) 更改getter/setter对,改为使用
,虽然有效,但这不是一个明智的解决方案String
如何修复解决方案A?还是有其他方法?当然,如果这可以完全在配置中完成,那将是最好的。好的,我找到了解决我手头问题的方法,不过,我认为这可以以更理智的方式完成。无论如何,我发布了我自己的类型转换器:
public class DateConverter extends StrutsTypeConverter {
private DateFormat dateFormat;
{
ActionContext ctx = ActionContext.getContext();
ActionSupport action = (ActionSupport) ctx.getActionInvocation().getAction();
String formatString = action.getText("dateformat.ui");
dateFormat = new SimpleDateFormat(formatString);
}
public Object convertFromString(Map context, String[] values, Class toClass) {
String input = values[0];
try {
Date date = dateFormat.parse(input);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
} catch (ParseException e) {
return null;
}
}
public String convertToString(Map context, Object object) {
Calendar cal = (Calendar) object;
return dateFormat.format(cal.getTime());
}
}
我删除了代码中不重要的部分,但这是一个有效的解决方案。好问题。请注意,您应该始终使用
yyyy-MM-dd
,因为它是。然后,在兼容HTML5的浏览器(如Chrome)上使用
时,它将根据正确的区域设置显示日期(如意大利的dd/MM/yyyyy
,或美国的MM/dd/yyyyyy
),但将始终将yyyyy-MM-dd
发送到服务器。问题会在不支持HTML5日期的浏览器(如Firefox)上出现,在浏览器中,您将退回到Javascript日历,该日历将发送它将显示的内容,并最终向用户呈现丑陋的yyyy-MM-dd
。顺便说一句,目前我们只使用两个地区。在匈牙利语中,我们使用yyyy.MM.dd.
,这在默认情况下与Struts2一起工作。但在英语地区,我们的客户习惯于yyyy-MM-dd,而事实并非如此。(yyyy/MM/dd
是Struts2中的默认值)。自定义日期转换器是一个不错的选择。我已经打开了一个,希望如此,请继续关注。@AndreaLigios干得不错!