Java 在Jtable/ResultSet中设置日期格式
我无法在我的Java 在Jtable/ResultSet中设置日期格式,java,date,jtable,Java,Date,Jtable,我无法在我的JTable中以我想要的格式显示Dates。我的JTable是使用结果集和列表创建的 我在getValueAt(.)中尝试了以下操作,但没有成功: if(value instanceof Date) { //System.out.println("isDate"); DateFormat formatter = DateFormat.getDateInstance(); Simpl
JTable
中以我想要的格式显示Date
s。我的JTable
是使用结果集和列表创建的
我在getValueAt(.)
中尝试了以下操作,但没有成功:
if(value instanceof Date)
{
//System.out.println("isDate");
DateFormat formatter = DateFormat.getDateInstance();
SimpleDateFormat f = new SimpleDateFormat("MM/dd/yy");
value = f.format(value);
Date parsed = (Date) value;
try {
parsed = (Date) f.parse(value.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
value = parsed.toString();
}
println(.)
从未被打印过,所以它甚至没有达到这个目的。正在显示的格式是1992年4月10日,但我想要04/10/92
当我们在
JTables
中讨论Date
主题时。。。我将isCellEditable(.)
设置为true,但无法编辑日期单元格。如何执行此操作?不要覆盖getValue
,而是使用:
正在显示的格式为
1992年4月10日
听起来日期的toString()表示形式存储在TableModel中,而不是日期对象。因此,您需要检查数据是如何从ResultSet复制到TableModel的。确保您正在使用resultSet.getObject()方法。或者,问题是您正在数据库中存储一个字符串,该字符串的格式与您看到的格式相同
无论如何,一旦您能够在TableModel中实际存储日期对象,请检查它,它允许您在一行代码中创建具有自定义日期格式的自定义呈现器。您应该创建DefaultTableCellRenderer的子类并覆盖
setValue(对象)
然后为整个列设置单元格渲染器
public class DateCellRenderer extends DefaultTableCellRenderer {
public DateCellRenderer() { super(); }
@Override
public void setValue(Object value) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy");
setText((value == null) ? "" : sdf.format(value));
}
}
然后在您的用户代码中执行类似于
JTable.getColumnModel().getColumn(index.setCellRenderer(newDateCellRenderer())代码>有第三方附加组件可用
只需通过nuget添加它,将脚本移动到您的内容脚本文件中。添加此行(示例)
Javascript:
<script src="@Url.Content("~/Content/Scripts/moment.min.js")" type="text/javascript"></script>
DateAdded: {
title: 'Date added',
width: '20%',
sorting: false,
display: function (data) {
return moment(data.record.DateAdded).format('DD/MM/YYYY HH:mm:ss');
}
}
检查您的“instanceof”条件是指java.util.Date还是指java.sql.Date。是否存在异常和堆栈跟踪?发布它们。结果集得到sql。我相信是日期。没有例外或错误请承认,我很惊讶OP接受了我在下面提供的可重用FormatRenderer的响应。鉴于上面的代码基本上是重置渲染器使用的值的黑客,我认为重写渲染器的setValue()方法会更直接。这不是API的设计使用方式吗?这也是上面给出的Swing教程链接中显示的方法。也许我遗漏了什么?两个答案我都喜欢。无法接受所有人:\r抱歉-希望我能同时接受这两个。请阅读这里+1,我不认为您遗漏了什么。这种方法比我的好。
DateAdded: {
title: 'Date added',
width: '20%',
sorting: false,
display: function (data) {
return moment(data.record.DateAdded).format('DD/MM/YYYY HH:mm:ss');
}
}