Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SimpleDataFormatter进行解析_Java_Date_Datetime_Simpledateformat - Fatal编程技术网

Java 使用SimpleDataFormatter进行解析

Java 使用SimpleDataFormatter进行解析,java,date,datetime,simpledateformat,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"); 有人能帮忙吗 谢谢。可以验证@Sun发布的内容,因为我得出了相同的结论。以下代码适用于我的系

我的日期格式如下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");
有人能帮忙吗


谢谢。

可以验证@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();
        }
    }
}
我想把它换成长的

似乎您的日期格式有问题,如果您使用API,它会更容易,您可以使用默认格式,如下所示:

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();

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

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

OffsetDateTime
适用于此处,而不是
ZonedDateTime
。输入仅与UTC有一个偏移量,没有时区。为了清晰起见,我建议将示例代码分成多行。谢谢@BasilBourque,没有相关内容,但是您是否有好的文档来区分这三行代码:OffsetDateTime-
ZonedDateTime
-
LocalDateTime
,以及我们应该在哪里使用它们?JavaDoc类就是这样做的。在UTC的一瞬间,
瞬间
。有一段时间,距离UTC还有几小时和几分钟,
OffsetDateTime
。对于调整为时区的某一时刻,特定地区的人们使用的UTC偏移量的命名历史,请使用
ZonedDateTime
。如果您没有特定的时刻,只有日期和时间,没有偏移量或区域的上下文,可以应用于任何地方或所有地方的日期时间,请使用
LocalDateTime
。很好的解释@BasilBourque非常感谢,我真的很感激这个答案具有所有优点。我们不需要任何显式格式化程序。无论格式化的日期时间是否为毫秒,它都将工作。使用java.time非常方便。仅供参考,您使用的是多年前被java.time类取代的麻烦的旧日期时间类。谢谢,@BasilBourque。我已将实现切换为使用OffsetDateTime。
OffsetDateTime
在这里比
ZonedDateTime
更合适。