转换yyyy-MM-dd HH:mm:ss.SSS zzz格式Strin到date对象

Asw*_*thy 1 java nsdateformatter

我有一个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();
    }**
Run Code Online (Sandbox Code Playgroud)

bt gettng error as java.text.ParseException:Unparseable date:"2013-07-29 06:35:40:622 GMT"

Mad*_*mer 7

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

另一个问题是你的格式与你的文字不符......

String的形式是

2013-07-29 06:35:40:622 GMT
Run Code Online (Sandbox Code Playgroud)

你的格式是以.的形式

yyyy-MM-dd HH:mm:ss.SSS zzz
                   ^--------This is a naughty character...
Run Code Online (Sandbox Code Playgroud)

秒和毫秒由不同的字符分隔,这没有帮助

现在,如果我们用实际格式修复预期的格式,这将无法解决时区的问题......但是,对于我们来说,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();
}
Run Code Online (Sandbox Code Playgroud)

哪个输出......

Mon Jul 29 16:35:40 EST 2013
2013-07-29 06:35:40:622
Run Code Online (Sandbox Code Playgroud)