关于java:将yyyy-MM-dd HH:mm:ss.SSS zzz格式转换为日期对象

Convert yyyy-MM-dd HH:mm:ss.SSS zzz format Strin to date object

我在yyyy-MM-dd HH:mm:ss.SSS zzz

中有一个GMT格式的字符串值

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

我确实像这样……
**

1
2
3
4
5
6
7
8
9
    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"


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

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

您的String的格式为

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

您的格式为

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

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

现在,如果我们将期望的格式修改为实际格式,则无法解决时区问题...但是,对我们而言,DateFormat提供了lenient方法,这使我们能够"弯曲"格式有点规则...

因此,您可以尝试所有类似的操作...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
}

哪个输出...

1
2
Mon Jul 29 16:35:40 EST 2013
2013-07-29 06:35:40:622


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


尝试一下。

1
2
3
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());