转换yyyy-MM-dd HH:mm:ss.SSS zzz格式字符串到日期对象

时间:2013-08-21 06:13:19

标签: 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();
    }**

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

3 个答案:

答案 0 :(得分:6)

主要(问题)是SimpleDateFormat无法识别文字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

答案 1 :(得分:-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());

答案 2 :(得分:-1)