Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jtable/ResultSet中设置日期格式_Java_Date_Jtable - Fatal编程技术网

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');
                        }
                    }