我使用以下jQuery函数来格式化我的datepicker
$(".datepicker").datepicker({
dateFormat : "MM yy"
}).attr('readonly', true);
选择后,我可以看到文本字段已正确设置为November 2013
。在提交表单之前,我使用Spring验证来验证日期
public class LocalMonthEditor extends PropertyEditorSupport {
@Override
public void setAsText(final String text) throws IllegalArgumentException {
if (!StringUtils.hasText(text)) {
// Treat empty String as null value.
setValue(null);
} else {
LocalDateTime localDateTime = LocalDateTime.parse(text,
DateTimeFormat.forPattern("MMMM yyyy"));
setValue(localDateTime);
}
}
@Override
public void setValue(final Object value) {
super.setValue(value == null || value instanceof LocalDateTime ? value
: new LocalDateTime(value));
}
@Override
public LocalDateTime getValue() {
return (LocalDateTime) super.getValue();
}
@Override
public String getAsText() {
return getValue() != null ? getValue().toString() : "";
}
}
但是,在提交表单后,文本字段将更改为2013-11-01T00:00:00.000
。如何将字段保持为November 2013
?
答案 0 :(得分:1)
首先,如果您需要的数据只是一个月和一年,为什么要使用Joda-Time?这就像上车开车到车道尽头的邮箱:额外的努力和复杂性没有任何好处。
相反,我建议您选择:
其次,因为您创建了LocalDatetime的实例,所以在某些时候似乎会调用toString
。 toString
上LocalDateTime
的默认输出以您看到的标准ISO 8601格式输出:2013-11-01T00:00:00.000
。 LocalDateTime具有日期值和时间值(因此名称),即使时间值可能设置为零(表示一天的开始)。所以这是一个功能,而不是一个错误。
我不知道Spring Validatation,也不知道你班级结构的其余部分。我猜你正在存储一个LocalDateTime
实例而不是你想要(或应该)存储一个String
实例。您可能需要阅读"model" versus "view"的主题。我们通常以不同于向用户呈现数据的方式跟踪幕后数据。在这种情况下,您可能应该在视图中使用字符串(“2013年11月”)持有一对ints或Integers(一个月,一个一年)。
答案 1 :(得分:0)
您正在将本地时间对象直接设置为文本字段,这就是您获取完整日期字符串的原因。使用parse()方法转换日期对象并进行设置。不要为日期创建新对象直接设置您的值。