Java 解析日期为格式化日期增加一天

Java 解析日期为格式化日期增加一天,java,date,gwt,smartgwt,Java,Date,Gwt,Smartgwt,这个简单的代码将Date字符串转换为我想要的格式。但是,格式化日期后,会添加一天。当onChanged事件在SmartGWT中的RelativeDataItem控件上激发时,将完成解析。但是,我认为使用该组件不会影响日期解析 private static String DATE_FORMAT = "dd.MMM.yyyy kk:mm"; ... private void changeDateFormat() { DateUtil.setShortDatetimeDispla

这个简单的代码将
Date
字符串转换为我想要的格式。但是,格式化日期后,会添加一天。当onChanged事件在SmartGWT中的RelativeDataItem控件上激发时,将完成解析。但是,我认为使用该组件不会影响日期解析

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
控件同时包含选择器文本和相邻标签文本,因此必须对两者进行格式化。

使用此格式:

dd.MMM.yyyy HH:mm
看起来
kk
在格式和解析方面是不对称的。我以前从未意识到这一点


但是Java的日期处理再也没有什么让我惊讶的了。

当DateTimeForfat解析字符串“19.Feb.2013 24:00”时,它会看到
24:00,相当于1天0小时0分0秒

因此,这一天被加到日期上,即19+1=20。所以它将日期显示为2月20日


如果您输入字符串为“19.Feb.2013 23:59:59”,则仅显示19 Feb

啊好。我收回了对Java的指责。。。这也许不是Java的错,但谷歌的错是:好发现。GWT是好的,但它确实有它偶尔的问题。