使用SimpleDateFormatter解析

时间:2018-07-14 16:30:06

标签: java date datetime simpledateformat

我有一个日期格式为2018-07-13T16:06:46 + 00:00的日期。我想将其转换为long。

我尝试了以下代码,它使我解析异常。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date dt = formatter.parse("2018-07-13T16:06:46+00:00");

有人可以帮忙吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

  

我想将其转换为long

似乎您的日期格式有问题,如果您使用的是java.time API,则更加简单,您可以使用OffsetDateTime这样的默认格式:

String stringDate = "2018-07-13T16:06:46+00:00";
OffsetDateTime ofset = OffsetDateTime.parse(stringDate);
Instant instant = ofset.toInstant();
long millisecond = instant.toEpochMilli();
System.out.println(millisecond);//1531498006000

或者您可以一次性完成:

//parse the date and convert it to long (It seems you want to get millisecond)
long millisecond = OffsetDateTime.parse("2018-07-13T16:06:46+00:00")
                                 .toInstant()
                                 .toEpochMilli();

答案 1 :(得分:1)

这是Java 8中的标准数据格式,您可以尝试:

ZonedDateTime parsedDateTime = ZonedDateTime.parse("2018-07-13T16:06:46+00:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println(parsedDateTime.toEpochSecond());

答案 2 :(得分:0)

我得出相同的结论,可以验证@Sun发布的内容。以下代码可在我的系统上使用:

import java.util.Date;  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  

public class DateFormatter {  

    public static void main(String[] args) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        try {
            Date dt = formatter.parse("2018-07-13T16:06:46+00:00");
            System.out.println(dt);
        } catch (ParseException e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}