【问题标题】:How to get GWT dates to be formatted correctly?如何正确格式化 GWT 日期?
【发布时间】:2021-06-05 21:20:41
【问题描述】:

如何以 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}
    };
}

【问题讨论】:

  • Javascript 时间显示很烦人,这些文档有更多信息 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 但我建议使用类似 dayjs 的库或在 javascript 中格式化日期的时刻
  • 看起来您正确使用了 DateTimeFormat。如果您使用的是开发模式,是否可能存在缓存问题?也许使用 GWT.log() 或 DomGlobal.console.debug() 将字符串记录到控制台,只是为了简化事情
  • 感谢 GWT.log() 提示(我是 GWT 新手)。它以正确的格式输出日期,因此必须是 Grid 将其改回。

标签: javascript java gwt


【解决方案1】:

原因是因为我使用的是一个

new DateFieldDef("date")

而不是

new StringFieldDef("date"),

感谢评论者的提示!

【讨论】:

    【解决方案2】:

    use locales 可能更容易:

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

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2013-09-18
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多