Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 如何在GWT中使用时区解析日期字符串_Java_Javascript_Gwt_Date_Timezone - Fatal编程技术网

Java 如何在GWT中使用时区解析日期字符串

Java 如何在GWT中使用时区解析日期字符串,java,javascript,gwt,date,timezone,Java,Javascript,Gwt,Date,Timezone,是否有人成功解析了GWT中带有自定义时区的日期字符串?GWT的DateTimeFormat允许根据时区格式化日期,但我还没有找到任何方法来执行相反的操作。所以,如果我有以下字符串“02:01:2011”(格式“MM:dd:yyyy”),我该怎么办。它可以在不同的时区产生不同的结果 另一个问题出现在尝试更改日期、月份等时。如何根据自定义时区进行更改 也许有任何库可以简化所有这些操作 我已经做了一些变通,并将时区部分添加到每个缺少该部分的日期字符串中。仍在寻找更专业的解决方案 public sta

是否有人成功解析了GWT中带有自定义时区的日期字符串?GWT的DateTimeFormat允许根据时区格式化日期,但我还没有找到任何方法来执行相反的操作。所以,如果我有以下字符串“02:01:2011”(格式“MM:dd:yyyy”),我该怎么办。它可以在不同的时区产生不同的结果

另一个问题出现在尝试更改日期、月份等时。如何根据自定义时区进行更改

也许有任何库可以简化所有这些操作


我已经做了一些变通,并将时区部分添加到每个缺少该部分的日期字符串中。仍在寻找更专业的解决方案

public static Date getDateGWT(final String strDate, final int style) {
        Date date = null;
        int useStyle = style;
        if (!validStyle(style)) {
            useStyle = DEFAULT_DATE_STYLE;
        }

        if ((strDate != null) && (strDate.trim().length() > 0)) {
            DateTimeFormat df = getDateFormatGWT(useStyle);
            try {
                date = df.parse(strDate);
            } catch (Exception e) {
                date = df.parse(date.toString());
            }
        }
        return date;
    }

     private static DateTimeFormat getDateTimeFormatGWT(final int style) {
        switch(style) {
        case SHORT:
            return DateTimeFormat.getShortDateTimeFormat();
        case MEDIUM:
            return DateTimeFormat.getMediumDateTimeFormat();
        case LONG:
            return DateTimeFormat.getLongDateTimeFormat();
        case FULL:
            return DateTimeFormat.getFullDateTimeFormat();
        default :
            return DateTimeFormat.getMediumDateTimeFormat();
        }        
   }

试试这个

最近我传递了一个项目:它模拟javascript中的日历和时区。

要么从服务器将时区提供给客户端(例如,将其包含在日期字符串中),要么在服务器上标准化时区,以便客户端可以假定一个恒定的时区。如果将时区包含在日期字符串中,下面的代码段应该可以工作

我还没有测试过,但根据文档,它应该可以工作:

String dateStr = "04/21/2011 01:37:36 -0800;
DateTimeFormat format = new DateTimeFormat("MM/dd/yyyy HH:mm:ss Z");
Date date = format.parse(dateStr);

根据时区的表示方式,可以更改格式字符串(Z)中的最终变量。有关详细信息,请参阅文档:

我执行了以下操作来解析时区tz中的日期。 这可能是不可靠的,但它是有效的:-

final long MILLIS_IN_MINUTE = 60000;

Date localDate = DateTimeFormat.getFormat("dd MMM yyyy HH:mm:ss").parse(dateString);

int localOffset = localDate.getTimezoneOffset() * MILLIS_IN_MINUTE;
int targetOffset = tz.getOffset(localDate) * MILLIS_IN_MINUTE;

// Subtract the offset to make this into a UTC date.
return new Date(localDate.getTime() - localOffset + targetOffset);

它解析客户端时区中的日期,然后将其调整到所需的时区。

问题是如何在不将时区部分附加到我的日期字符串中的情况下执行此操作。将时区添加到字符串中是处理此IMO的正确方法。另一种方法是自己管理偏移,但是你必须担心你所在的时区,知道正确的偏移量(这可能会因为DST而改变)。通常,我总是以UTC格式保存日期,然后在格式化日期以输出到浏览器时,让DateTimeFormat将其置于正确的时区。您可以将时区与UTC日期一起传递到format方法中,但无法从UI中检索日期(如2011年4月14日)并根据自定义时区将其解析为java日期。我喜欢“Bartek Jablonski”解决方案,但现在我没有时间调查它。自定义时区来自哪里?如果将其作为GWT时区对象,则只需将偏移量添加到日期(timezone.getOffset()返回UTC的分钟数)。日期将始终解析为UTC,时区将始终具有与UTC的正确偏移量。如果格式和解析是反射的,那就更好了。应该有一个解析方法,它接受一个时区,它还应该与v和z格式的格式输出工作。它如何帮助我时区?它看起来不错,但我已经通过附加时区的一部分,我的数据字符串。我不知道您的解决方案是否足够成熟,这就是为什么我无法将其标记为正确的原因。当我有时间时,我会尝试测试它。请参考此链接。。。。我看到了。但我仍然不知道如何以正确的方式实现它。我已经做了一个变通方法,但我不喜欢它。有一个对parse(String,TimeZone)方法的请求:或者getFormat(“…ssz”)。parse(dateString+“UT”)?