首页 > 解决方案 > 如何正确格式化 GWT 日期?

问题描述

您如何以 MM/dd/yyyy 格式获取今天的日期?我遵循了文档和示例。应该这样做:

Date today = new Date();
DateTimeFormat fm = DateTimeFormat.getFormat("MM/dd/yyyy");
String date = fm.format(today);
return new Object[][] {
        new Object[] { "This is a note", date},
        new Object[] { "This is a very very very long note", date}
};

但相反,它将以下内容放在网格的日期单元格中:

2021 年 3 月 7 日星期日 00:00:00 GMT-0700(山地标准时间)

所以然后我尝试像这样使用javascript:

public native String getTodaysDate() /*-{
    return new Date().toLocaleDateString();
    }-*/;

private Object[][] getNoteData() {
    String date = getTodaysDate();

产生相同的结果。

这么简单的任务会占用这么多时间!建议?

编辑:我正在为人们添加更多代码以更好地诊断问题。

private Panel createNotesTable() {
    Panel panel = new Panel();

    RecordDef recordDef = new RecordDef(
            new FieldDef[] { 
                    new StringFieldDef("note"), 
                    new DateFieldDef("date"), 
            }
    );

    GridPanel grid = new GridPanel();
    Object[][] data = getNoteData();
    MemoryProxy proxy = new MemoryProxy(data);

    ArrayReader reader = new ArrayReader(recordDef);
    Store store = new Store(proxy, reader);
    store.load();
    grid.setStore(store);

    ColumnConfig[] columns = new ColumnConfig[] {
            new ColumnConfig("Note", "note", 130, true, null, "note"),
            new ColumnConfig("Date", "date", 65, true)
    };
    ColumnModel columnModel = new ColumnModel(columns);
    grid.setColumnModel(columnModel);

    grid.setStripeRows(true);

    panel.add(grid);
    return panel;
}

private Object[][] getNoteData() {
    Date today = new Date();
    DateTimeFormat fm = DateTimeFormat.getFormat("MM/dd/yyyy");
    String date = fm.format(today);
    GWT.log("date=" +date);  //date is formatted correctly
    //but when it is put into the cell, it gets reformatted back to a long version
     return new Object[][] {
            new Object[] { "This is a note", date},
            new Object[] { "This is a very very very long note", date}
    };
}

标签: javascriptjavagwt

解决方案


使用 locales可能更容易:

String date = new Intl.DateTimeFormat('en-US').format(today)

推荐阅读