时间:2011-01-06 18:10:07

标签: fullcalendar iso8601

1 个答案:

答案 0 :(得分:1)

我的解决方案始终是从客户端的FullCalendar中使用UNIX时间戳或UTC dateformat从服务器发送事件。

首先,使用jquery-json插件从客户端发送的事件就像

var event ={"startDate" : startDate, "endDate" : endDate,"allDay" : allDay};
$.ajax({
  url : "${feedbackURL}", type: 'POST', contentType: 'application/json;charset=UTF-8'
 ,dataType: (($.browser.msie) ? "text" : "xml"), data : $.toJSON(event)
});

$ .toJSON()中序列化的事件将使用UTC fomat "yyyy-MM-dd'T'HH:mm:ss'Z'"格式化。

然后您可以使用gson和jodatime来解析UTC格式日期

private static final DateTimeFormatter UTC_FORMAT = DateTimeFormat
        .forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").withZone(DateTimeZone.UTC);

public static final JsonDeserializer<Date> DATE_DESERIALIZER = new JsonDeserializer<Date>() {

    /**
     * @see org.apache.wicket.datetime.DateConverter#convertToObject(String,
     *      java.util.Locale)
     */
    @Override
    public Date deserialize(final JsonElement json, final Type typeOfT,
            final JsonDeserializationContext context)
            throws JsonParseException {
        String value = json.getAsString().replace(".000", "");
        try {
            MutableDateTime dt = UTC_FORMAT.parseMutableDateTime(value);

            return dt.toDate();
        } catch (final Exception e) {
            LOG.debug("Date parsing error", e);
            throw new ConversionException(e);
        }
    }

};

其次,使用org.apache.wicket.datetime.markup.html.form.DateTextFieldorg.apache.wicket.datetime.markup.html.basic.DateLabel显示日期。

要处理客户的时区问题,请将这些问题添加到Application

// always set your application's DateTimeZone to UTC
TimeZone.setDefault(TimeZone.getTimeZone("etc/UTC"));
DateTimeZone.setDefault(DateTimeZone.UTC);
// detect client's timezone in the WebClientInfo
getRequestCycleSettings().setGatherExtendedBrowserInfo(true);

最后,从服务器进行查询,并使用UNIX时间戳将事件发送到客户端的FullCalendar。

//Java
long toTimestamp(final Date date) {
return date.getTime() / 1000;
}

Date fromTimestamp(final long timestamp) {
return new Date(timestamp * 1000);
}

制作的jsons就像这样

[{"id":"1","title":"test1","allDay":true,"start":1299805200,"end":1299807000,"editable":false},
{"id":"2","title":"test2","allDay":false,"start":1299805200,"end":1299807000,"editable":true}]