0

我有一个GMT格式化的字符串值yyyy-MM-dd HH:mm:ss.SSS zzz

eg: 2013-07-29 06:35:40:622 GMT. 我想将它作为日期对象并将其转换IST为时区。

我做了这样的事情...... **

    String GMT = "2013-07-29 06:35:40:622 GMT";  
     DateFormat utcDateFormat =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zzz");
     utcDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

    try {
        utcDateFormat.parse(GMT);
    } catch (ParseException e) {
        e.printStackTrace();
    }**

bt gettng 错误为 java.text.ParseException:无法解析的日期:“2013-07-29 06:35:40:622 GMT”

4

3 回答 3

8

主要(问题)是SimpleDateFormat无法识别 text GMT,它正在为时区寻找不同的格式。

另一个问题是您的格式与您的文本不匹配...

String的形式是

2013-07-29 06:35:40:622 GMT

你的格式是

yyyy-MM-dd HH:mm:ss.SSS zzz
                   ^--------This is a naughty character...

秒和毫秒由不同的字符分隔,这无济于事

现在,如果我们用实际格式修复预期格式,这不会解决时区问题......但是,对我们来说,DateFormat它提供了一种lenient方法,这允许我们稍微“弯曲”格式规则。 ..

因此,掌握了所有这些,您可以尝试类似...

String text = "2013-07-29 06:35:40:622 GMT";
SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
TimeZone gmt = TimeZone.getTimeZone("GMT");
sdf.setTimeZone(gmt);
sdf.setLenient(false);

try {
    Date date = sdf.parse(text);
    System.out.println(date);

    System.out.println(sdf.format(date));
} catch (Exception e) {
    e.printStackTrace();
}

哪个输出...

Mon Jul 29 16:35:40 EST 2013
2013-07-29 06:35:40:622
于 2013-08-21T06:47:11.053 回答
-1

Joda Time 支持时区转换。 http://www.joda.org/joda-time/userguide.html#Changing_TimeZone

于 2013-08-21T06:30:36.063 回答
-1

尝试这个。

Date d=new Date("2013-07-29 06:35:40:622");
Date newDate=new Date(d.getYear(),d.getMonth(),d.getDate());
Time t=new Time(d.getHours()+5, d.getMinutes()+30, d.getSeconds());
于 2013-08-21T06:25:47.487 回答