我正在尝试将返回的日期解析为HTML5 datetime输入字段中的值。在Opera中尝试一下以查看示例。返回的日期如下所示:2011-05-03T11:58:01Z

我想将其解析为Java Date或Calendar对象。

理想情况下,解决方案应包含以下内容:

  • 没有外部库( jar )
  • 处理所有可接受的RFC 3339格式
  • 应该可以轻松地验证字符串,以查看它是否是有效的RFC 3339日期
  • 最佳答案

    刚刚发现Google在Google HTTP Client Library中实现了Rfc3339解析器

    https://github.com/google/google-http-java-client/blob/dev/google-http-client/src/main/java/com/google/api/client/util/DateTime.java

    经过测试。它很好地解析了亚秒级的时间片段。

    import java.time.ZoneId;
    import java.time.format.DateTimeFormatter;
    import java.util.Date;
    
    import com.google.api.client.util.DateTime;
    
    DateTimeFormatter formatter = DateTimeFormatter
                .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                .withZone(ZoneId.of("UTC"));
    
    @Test
    public void test1e9Parse() {
        String timeStr = "2018-04-03T11:32:26.553955473Z";
    
        DateTime dateTime = DateTime.parseRfc3339(timeStr);
        long millis = dateTime.getValue();
    
        String result = formatter.format(new Date(millis).toInstant());
    
        assert result.equals("2018-04-03T11:32:26.553Z");
    }
    
    @Test
    public void test1e3Parse() {
        String timeStr = "2018-04-03T11:32:26.553Z";
    
        DateTime dateTime = DateTime.parseRfc3339(timeStr);
        long millis = dateTime.getValue();
    
        String result = formatter.format(new Date(millis).toInstant());
    
        assert result.equals("2018-04-03T11:32:26.553Z");
    }
    
    @Test
    public void testEpochSecondsParse() {
    
        String timeStr = "2018-04-03T11:32:26Z";
    
        DateTime dateTime = DateTime.parseRfc3339(timeStr);
        long millis = dateTime.getValue();
    
        String result = formatter.format(new Date(millis).toInstant());
    
        assert result.equals("2018-04-03T11:32:26.000Z");
    }
    

    关于java - 如何使用Java解析RFC 3339日期时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6038136/

    10-14 14:05
    查看更多