如何用Java将2017-08-01T16:00:00-04:00转换为时间戳?

如何用Java将2017-08-01T16:00:00-04:00转换为时间戳?,java,datetime,parsing,Java,Datetime,Parsing,我希望在Java中将日期从默认日期格式转换为时间戳。 我尝试了以下代码,但不起作用: String string = "2017-08-01T16:00:00-04:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss-mm:ss"); LocalDate date = LocalDate.parse(string, formatter);

我希望在Java中将日期从默认日期格式转换为时间戳。 我尝试了以下代码,但不起作用:

String string = "2017-08-01T16:00:00-04:00";
DateTimeFormatter formatter = 
                  DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss-mm:ss");
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);
java.time.format.DateTimeParseException:文本 无法在索引20处分析“2017-08-01T16:00:00-04:00”

在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400)


不要将
LocalDate
用于
字符串

  • 包含有关一天中时间的信息,需要
    LocalDateTime
  • 包含偏移量,
    LocalDateTime
    不能考虑该偏移量
  • 相反,请使用
    OffsetDateTime

    public static void main(String[] args) {
        String string = "2017-08-01T16:00:00-04:00";
        OffsetDateTime odt = OffsetDateTime.parse(string);
        System.out.println(odt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
    }
    
    输出:

    2017-08-01T16:00:00-04:00
    
    此外,您的模式在模式的
    DateTimeFormatter.of(“yyyy-MM-dd'HH:MM:ss-MM:ss”)有严重的缺陷,比如重复的项目

    当然,您可以使用与输入不同的模式(符合ISO 8601标准)打印结果:

    这次输出:

    01.08.2017 16:00:00-0400
    
    您缺少一个区域,并且有两次分秒时间。我建议使用其他格式打印input@cricket_007很好的建议,谢谢。。。添加了第二个示例。@deHaar谢谢您的帮助。您还可以指定如何将
    OffsetDateTime
    正确转换为时间戳吗?@StanislavFedosov您是指
    java.sql.timestamp
    ?或者像毫秒这样的表示法?看看。。。
    public static void main(String[] args) {
        String string = "2017-08-01T16:00:00-04:00";
        OffsetDateTime odt = OffsetDateTime.parse(string);
        System.out.println(odt.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss Z")));
    }