将字符串时间戳转换为符合ISO 8601标准的字符串

时间:2017-04-29 17:17:57

标签: java date jodatime iso8601

我有一个字符串格式的时间戳和偏移量,如下所示,有两个不同的变量:

01/14/2016 07:37:36PM
-08:00

我想将上面的时间戳转换为ISO 8601 compliant String, with milliseconds and timezone,因此在转换后它应该如下所示:

2016-01-14T19:37:36-08:00

我该怎么做?我正在使用jodatime库。

2 个答案:

答案 0 :(得分:4)

较新的java.time类在ISO 8601字符串中运行良好。

    String dateTimeString = "01/14/2016 07:37:36PM"; 
    String offsetString = "-08:00";

    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString,
            DateTimeFormatter.ofPattern("MM/dd/uuuu hh:mm:ssa"));
    ZoneOffset offset = ZoneOffset.of(offsetString);
    String formattedTimestamp = dateTime.atOffset(offset).toString();
    System.out.println(formattedTimestamp);

打印

2016-01-14T19:37:36-08:00

远离过时的课程,例如SimpleDateFormat

什么是offsetString不存在?据我所知,在这种情况下,您希望UTC的偏移量为Z。例如:

    ZoneOffset offset;
    if (offsetString == null) {
        offset = ZoneOffset.UTC;
    } else {
        offset = ZoneOffset.of(offsetString);
    }
    String formattedTimestamp = dateTime.atOffset(offset).toString();

我们现在获得null offsetString

2016-01-14T19:37:36Z

JSR-310中描述了java.time中的类(其中我只使用了几个),内置了Java 8.如果你想在Java 6或7中使用它们怎么办? ?你得到了ThreeTen Backport(链接如下)。它为您提供了Java 6和7的大多数类。我不是很高兴地告诉您需要一个外部库,但在这种情况下,只有在您转到Java 8之后才会这样。我希望您能尽快。

我相信它也可以用JodaTime完成,但我没有经验,所以不能在那里给你详细信息。我所知道的,我已经阅读了JodaTime背后的人,现在建议你转而去java.time。所以我要求你换一个外部库来换一个更新的(也可能是更好的)库。我本人并不满足于此。只有当你已经有一个使用JodaTime的代码库时,它才真正无足轻重。

链接:ThreeTen Backport

答案 1 :(得分:0)

您可以在以下示例中找到更多示例: - http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String string2 = "2001-07-04T12:08:56.235-07:00";
Date result2 = df2.parse(string2);