Java解析字符串中带时区的日期

rjjhvcjd  于 2023-01-07  发布在  Java
关注(0)|答案(5)|浏览(202)

我想从"31-12-2014 18:09 +05:30"的字符串中解析一个带时区的日期。我尝试使用"d-MM-yyyy HH:mm ZZ""d-MM-yyyy HH:mm Z"的simple-Date-Format进行解析。但是它给了我一个无法解释的日期异常。如何做到这一点?请帮助我。

ct3nt3jp

ct3nt3jp1#

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm XXX");
Date d = sdf.parse("31-12-2014 18:09 +05:30");
System.out.println(d);

注意,不能在SimpleDateFormat of JDK7之前使用X,因为它是ISO 8601时区格式。
在Java6中,您只能使用ZZZ,但它不匹配+05:30,因为Z匹配RFC822时区格式
如果您使用的是Java 6,请参考以下答案:将符合ISO 8601的字符串转换为java.util.Date

dced5bon

dced5bon2#

使用X代替Z或ZZ,如下所示:

String str = "31-12-2014 18:09 +05:30";
DateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm X");
System.out.println(format.parse(str));
Output:
Wed Dec 31 18:39:00 IST 2014
vdzxcuhz

vdzxcuhz3#

您有两个错误:首先,您应该使用两个d表示日期。其次,使用X代替Z表示时区。X表示您正在使用的格式。有关详细信息,请参阅文档。http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

"dd-MM-yyyy HH:mm X"
3df52oht

3df52oht4#

其他人指出了Java SE 7中的X选项。但是,如果您使用的是较早的Java版本,则可以将时区部分更改为+0530,然后它将与Z(即使在Java SE 1.4中也可用)一起工作。

oknwwptz

oknwwptz5#

给那些偶然发现这些柱子的人:
如果可以,请使用java.time,如果您使用的是Java 8或更高版本,则应该是这种情况...
下面是如何解析问题中的示例String

public static void main(String[] args) {
    // example String
    String datetimeString = "31-12-2014 18:09 +05:30";
    // formatter for that very pattern
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
                                "dd-MM-uuuu HH:mm xxx", Locale.ENGLISH
                            );
    // use the formatter to get an OffsetDateTime
    OffsetDateTime odt = OffsetDateTime.parse(datetimeString, dtf);
    // print the result
    System.out.println(odt);
    // or print the result using the input format
    System.out.println(odt.format(dtf));
}

输出:

2014-12-31T18:09+05:30
31-12-2014 18:09 +05:30

相关问题