1

この単純なコードは、Date文字列を希望する形式に変換します。ただし、日付がフォーマットされると、さらに 1 日が追加されます。SmartGWT の RelativeDateItem コントロールで onChanged イベントが発生すると、解析が行われます。ただし、そのコンポーネントの使用が日付の解析に影響を与えるとは思いません。

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コントロールにはピッカー テキストと隣接するラベル テキストの両方が含まれているため、2 回発生し、両方をフォーマットする必要があります。

4

2 に答える 2

1

次の形式を使用します。

dd.MMM.yyyy HH:mm

kkフォーマットとパースが非対称のようです。今まで気づかなかった。

しかし、Javaの日付処理については、もはや驚くことはありません...

于 2013-02-25T13:12:25.683 に答える
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 です。したがって、日付は 20 Feb と表示されます。

文字列を「19.Feb.2013 23:59:59」と入力すると、2 月 19 日のみが表示されます。

于 2013-02-25T14:06:46.147 に答える