无法在GWT中将字符串转换为日期

时间:2014-03-28 03:08:05

标签: java date gwt

我正在尝试在GWT中将字符串更改为日期。在StackOverFlow中搜索之后,我得到了一个解决方案。但我仍然得到

  

java.lang.IllegalArgumentException:Fri Feb 21 00:00:00 IST 2014

下面是我在GXT GridEditor类中的代码。

DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss z yyyy");
Date checkInDate = fmt.parse(ACCCheckBoxModel.getSelectedItem().getCheckinDate());

ACCCheckBoxModel.getSelectedItem().getCheckinDate()我得到一个字符串。我需要将此String转换为Date。然后我需要将日期格式转换为dd/MMM/yyyy格式。

请建议如何解决此问题。

3 个答案:

答案 0 :(得分:1)

解析器不理解IST。尝试将解析移到服务器端。

来自API-Doc的引用:

  

解析时区支持有限。只有标准GMT和   支持RFC格式。使用时区ID的时区规范   (如America / Los_Angeles),时区名称(如PST,太平洋   标准时间)不受支持。通常,这是一个太大的负担   客户端应用程序加载所有时区符号。并在   几乎所有这些情况下,进行此类解析都是更好的选择   服务器端通过某种RPC机制。这个决定是基于   我们研究过的特定用例;原则上,它可能是   在未来版本中有所改变。

答案 1 :(得分:0)

问题在于IST没有按DateTimeFormat

转换

尝试这个,它的工作正常,没有IST模式

    DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss yyyy");
    Date checkInDate = fmt.parse("Fri Feb 21 00:00:00 2014");
    System.out.println(DateTimeFormat.getFormat("dd/MMM/yyyy").format(checkInDate));

或使用GMT代替IST,如下所示

    DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss v yyyy");
    Date checkInDate = fmt.parse("Fri Feb 21 00:00:00 GMT+05:30 2014");
    System.out.println(DateTimeFormat.getFormat("dd/MMM/yyyy").format(checkInDate));

只需调用一个GWT RPC调用,然后在服务器上尝试下面的代码,找出你的本地化日期格式并立即使用它。

        Locale locale = httpServletRequest.getLocale();

        final Date currentDate = new Date();
        final DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.FULL, locale);
        final String format = dateInstance.format(currentDate);
        System.out.println(format);

        if (dateInstance instanceof SimpleDateFormat) {
            System.out.println("pattern: " + ((SimpleDateFormat) dateInstance).toPattern());
            System.out.println("localized pattern: "+((SimpleDateFormat) dateInstance).toLocalizedPattern());
        }

以下是有关internationalization sample

的日期模式的示例代码

这是在服务器端阅读有关How to get the pattern of Number Format of a specific locale?的另一个链接。

答案 2 :(得分:0)

试试这个:

String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 BOT 2010

并查看

Java string to date conversion