当前位置: 首页 > 知识库问答 >
问题:

在Java中转换ISO与日期

景同
2023-03-14

我需要创建一个方法以两种格式接收日期:

>

2022-05-27(基本日期)

我的代码:

 private static final String DATE_TIME_FORMAT = "dd-MM-yyyy HH:mm";


 private String getFormattedDateTime(String date){
    DateTimeFormatter formatter = DateTimeFormatter
            .ofPattern(DATE_TIME_FORMAT).withZone(ZoneId.of("UTC"));
    Instant instant = DateTimeFormatter.ISO_INSTANT.parse(date, Instant::from);
    return formatter.format(instant);
}

对简单日期格式抛出异常:

java.time.format.DateTimeParseException:文本'2022-05-27'无法解析在索引10在java.base/java.time.format.DateTimeFormatter.parseResolved0(未知来源)在java.base/java.time.format.DateTimeFormatter.parse(未知来源)

我的代码目前适用于ISO。检查日期是否为ISO的最佳方法是什么?

共有2个答案

苏德容
2023-03-14

实现这一点的方法是首先尝试准确描述您接受的格式:在您的情况下,它不是ISO\U即时,而是带有可选UTC时间部分的日期部分。因此,请使用该格式创建一个格式化程序,然后使用parseBest:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd['T'HH:mm:ss.SSSVV]");
    TemporalAccessor parsed = formatter.parseBest("2022-03-01", Instant::from, LocalDate::from);
    Instant instant = parsed instanceof LocalDate d? d.atStartOfDay().toInstant(ZoneOffset.UTC) : (Instant) parsed;
    System.out.println(instant);

这将接受您的任何一种格式的输入。

盖诚
2023-03-14

一种懒惰的方法是比较字符串长度。

private String getFormattedDateTime(String date){
    DateTimeFormatter formatter = null;
    if(date.lenght()>10)
       // initialize formatter for '2022-05-27T17:38:00.000Z'
    else 
       // initialize formatting for '2022-05-27'

    //rest of your code

}

虽然ISO和基本日期都需要2个格式化程序

 类似资料:
  • 问题内容: 如何从JSON.Net转换日期时间格式,例如: /日期(1154970000000 + 0700)/ 到ISO- ?? 格式2011-12-18T23:34:59Z 最好使用Python或Javascript。 Ive决定使用后者,因为它在JS世界中似乎是使用最广泛,人类可读且自然可排序的。我将按用户存储偏移量。 如果实现又有点问题,是否有人可以告诉我两种格式的正确名称,我可能会更不了

  • 问题内容: 如何将时间转换为ISO 8601日期格式?(-_-;) 问题答案: 面向对象 这是推荐的方法。 程序 对于旧版本的PHP,或者您更熟悉过程代码。

  • 我想把两次加在一起。国际标准化组织 有什么建议吗?

  • 我有Excel数据,并尝试使用Talend Big data for Open Studio将数据插入MongoDB。这是我的工作, 在excel表单中,我有一个日期值列,格式为7/13/2017(MM/DD/YYYY)作为字符串类型,我正在尝试将该列值作为ISO格式ISODate(“2017-07-13T00:00:00.000Z”)插入MongoDB中。

  • 问题内容: 我正在阅读XML文档(UTF-8),并最终使用ISO-8859-1在网页上显示内容。正如预期的那样,有几个字符显示不正确,比如,和(他们显示为?)。 是否可以将这些字符从UTF-8转换为ISO-8859-1? 这是我编写的尝试此功能的代码段: 我不太确定发生了什么问题,但是我认为是re​​adLine()引起了麻烦(因为字符串将是Java / UTF-16编码的?)。我尝试的另一种变化

  • 相反,我希望保持相同的日期和时间,如:Wed Sep 09 09:58:00,这样我就可以将这个日期对象分别转换为“yyyy-mm-dd”、“hh:mm:ss”和“yyyy-mm-dd't'hh:mm:ss”格式的字符串。