解析带时区的日期

时间:2018-08-22 04:28:06

标签: java android date

我试图解析此字符串:

"2018-08-21T10:12:06.872722+00:00"

但出现了java.text.ParseException。

我正在使用这种格式:

"yyyy-MM-dd'T'HH:mm:ss.SSSz"

重要:我尝试使用XXX,ZZZZZ,ZZZ,z作为时区,但无法正常工作

怎么了?谢谢。

将日期隐藏为新格式:

formatDate("2018-08-21T10:12:06.872722+00:00");

public static String formatDate(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
    SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");

    Date d;
    try {
        d = sdf.parse(date);
    } catch (ParseException e) {
        e.printStackTrace();
        return "";
    }

    return output.format(d);
}

5 个答案:

答案 0 :(得分:1)

您正在使用的 SimpleDateFormat 类现在是旧版,应该由java.time类进行补充。而且它也不是线程安全的。

因此,如果您使用的是Java 8或更高版本,请使用以下示例代码:

public static void main(String[] args) {
        String date = "2018-08-21T10:12:06.872222+00:00";
        LocalDateTime parsedDate = LocalDateTime.parse(date, java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSz"));
        System.out.println(parsedDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}

如果您坚持使用SimpleDateFormat类,请按照@Prateek的回答进行操作。

答案 1 :(得分:1)

在Java 8或更高版本中,您可以使用 单行 代码达到与以下相同的效果:

System.out.println(OffsetDateTime.parse("2018-08-21T10:12:06.872722+00:00",
            DateTimeFormatter.ISO_OFFSET_DATE_TIME).toLocalDate());

输出:

2018-08-21

答案 2 :(得分:0)

您的模式根本不与输入字符串相对应...它不起作用也就不足为奇了。这样可能会更好:

SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
                                        Locale.ENGLISH);

然后以所需的格式打印,您需要第二个SimpleDateFormat:

Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate)

答案 3 :(得分:0)

您可以调用此方法。

void checkDateParsing()
        {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
            Date d = null;
            try {
                d = sdf.parse("2018-08-21T10:12:06.872722+00:00");
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Log.e("date",d.toGMTString());
        }

答案 4 :(得分:0)

public class test1 {
public static void main(String[] args) {            
    System.out.println(formatDate("2018-08-21-10:12:06.872+0100"));

} 


public static String formatDate(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss.SSSZ");
    SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");

Date d;
try {
    d = sdf.parse(date);
} catch (ParseException e) {
    e.printStackTrace();
    return "";
}
return output.format(d);

}