Javascript 如何在GWT中解析日期?

Javascript 如何在GWT中解析日期?,javascript,gwt,parsing,Javascript,Gwt,Parsing,我在这件事上浪费了很多时间,所以我把我学到的问题和答案贴出来,作为帮助其他人的资源。问题的背景是构建RSS阅读器。虽然RSS日期应该符合RFC822,但它们以不同的方式进行,因此您需要一种灵活的方法。我尝试使用GWT DateTimeFormat以及硬编码一些不同的掩码,但不断发现破坏我代码的测试用例。我终于找到了一个优雅的解决方案: 包装对javascript Date.parse()方法的调用。这真的“管用” 作为一个元理论,我将在继续开发的过程中对其进行测试,通过使用本机javascrip

我在这件事上浪费了很多时间,所以我把我学到的问题和答案贴出来,作为帮助其他人的资源。问题的背景是构建RSS阅读器。虽然RSS日期应该符合RFC822,但它们以不同的方式进行,因此您需要一种灵活的方法。我尝试使用GWT DateTimeFormat以及硬编码一些不同的掩码,但不断发现破坏我代码的测试用例。我终于找到了一个优雅的解决方案:

包装对javascript Date.parse()方法的调用。这真的“管用”

作为一个元理论,我将在继续开发的过程中对其进行测试,通过使用本机javascript或其他库,而不是试图在GWT中使用Java对其进行强制,可能有很多东西“只起作用”


干杯

使用JSNI本地javascript处理来包装对javascript Date.parse()方法的调用。它可以处理比GWT的DateTimeFormat多得多的格式

下面的代码给出了一个演示。请注意,GWT不允许javascript传递长值,所以我使用toString来解决这个问题

      public native String webDateToMilliSec(String webDate) /*-{
        var longDate = Date.parse(webDate);
        return longDate.toString();
      }-*/;

      public long getTimeStamp(final Element el) {
          String sDate = getValueIfPresent(el, "pubDate");
          String sLongDate = webDateToMilliSec(sDate);
          long longDate = Long.parseLong(sLongDate);
          return longDate;
      }

好提示!作为旁注,在本网站上发布问题和答案的常见方式是先发布问题,然后在“答案”字段中发布答案。您可以将其标记为已接受的答案(虽然不是立即),并让其他人有机会发布他们自己的解决问题的方法。是否有我们应该关注的特定于浏览器的内容?您还可以通过添加一些示例代码来完善您的答案(我知道这是基本内容,但既然您已经编写了,为什么不共享它?;)