这个简单的代码将Date
字符串转换为我想要的格式。但是,格式化日期时,会添加额外的一天。当onChanged事件在SmartGWT中的RelativeDateItem控件上触发时,解析完成。但是,我认为使用该组件不会影响日期解析。
private static String DATE_FORMAT = "dd.MMM.yyyy kk:mm";
...
private void changeDateFormat()
{
DateUtil.setShortDatetimeDisplayFormatter(new DateDisplayFormatter()
{
public String format(Date date)
{
System.out.println("setShortDatetimeDisplayFormatter = " + date.toString());
if(date == null)
{
return null;
}
else
{
final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(DATE_FORMAT);
System.out.println("Formatted date = " + dateFormatter.format(date));
return dateFormatter.format(date);
}
}
});
// It is a requirement that we implement a custom date parser or the onChanged event
// will not fire.
DateUtil.setDateParser(new DateParser()
{
public Date parse(String dateString)
{
System.out.println("Entering parse = " + dateString);
final DateTimeFormat format = DateTimeFormat.getFormat(DATE_FORMAT);
System.out.println("Exiting parse = " + format.parse(dateString));
return format.parse(dateString);
}
});
}
调试:
setShortDatetimeDisplayFormatter = Tue Feb 19 00:00:00 EST 2013
Formatted date = 19.Feb.2013 24:00
Entering parse = 19.Feb.2013 24:00
Exiting parse = Wed Feb 20 00:00:00 EST 2013
Entering parse = 19.Feb.2013 24:00
Exiting parse = Wed Feb 20 00:00:00 EST 2013
setShortDatetimeDisplayFormatter = Wed Feb 20 00:00:00 EST 2013
Formatted date = 20.Feb.2013 24:00
它会触发两次,因为RelativeDateItem
控件包含选择器文本和相邻的标签文本,因此两者都必须格式化。
答案 0 :(得分:1)
使用以下格式:
dd.MMM.yyyy HH:mm
kk
看起来格式不对称&解析。我之前从未意识到这一点。
但是对于Java的日期处理不再让我感到惊讶......
答案 1 :(得分:1)
当DateTimeForfat解析字符串“19.Feb.2013 24:00”时,它会看到24:00 which is equivalent to 1 day 0 hours 0 minutes and 0 seconds
。
因此,1天被添加到日期,即19 + 1 = 20.因此它显示日期为2月20日。
如果你输入字符串为“19.Feb.2013 23:59:59”,它只给你2月19日。