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

Java 8从不包含所有字段的字符串解析ZonedDateTime

微生永春
2023-03-14

当我在字符串模式中只指定了year(可能还有其他几个时态字段)时,我希望将其他缺席字段设置为它们的最低值。例如,在Java8之前,我的代码看起来像

String source = "2015";
String pattern = "yyyy";
DateFormat sdf = new SimpleDateFormat(pattern);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = null;
try {
    date = sdf.parse(source);
} catch (ParseException e) {
    e.printStackTrace();
}

SimpleDateFormat sdfGMT2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z");
sdfGMT2.setTimeZone(TimeZone.getTimeZone("GMT"));

String newf = sdfGMT2.format(date);
System.out.println(newf);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("YYYY");
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2008", fmt);
java.time.format.DateTimeParseException: Text '2008' could not be parsed: Unable to obtain
    ZonedDateTime from TemporalAccessor: {WeekBasedYear[WeekFields[SUNDAY,1]]=2008},ISO
        of type java.time.format.Parsed

共有1个答案

居焱
2023-03-14

它有点冗长,但是在创建DateTimeFormatter时必须为缺少的字段指定默认值:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .appendValue(ChronoField.YEAR)
        .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
        .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .toFormatter()
        .withZone(ZoneOffset.UTC);

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2008", fmt);

这包括ZoneID,这是ZonedDateTime所必需的。

 类似资料:
  • 问题内容: 在MySQL中,使用LIKE非常普遍。我们使用它是这样的:。我们有一个子字符串,而字段有完整的字符串。但是我需要的是相反的东西。我在字段中有子字符串。因此,我希望该行包含我的字符串的子字符串。假设表是: 而且我有一个来自用户的字符串:。我需要返回这样的MySQL查询,因为这是用户字符串的子字符串。就像是: 提前致谢。 问题答案: 您在寻找LIKE运算子 模式匹配使用SQL简单的正则表达

  • 我实现了我试图实现的目标,然而,我不满足于不必要的(?)字符串解析来达到我的目标。 null null 我的汽车类:

  • 我正在寻找一个运算符,它允许我检查字段的值是否包含某个字符串。 比如: 可能吗?

  • 我将正则表达式模式的列表传递给以对照syslog文件进行检查。它们通常匹配IP地址和日志条目; 它只是一个模式列表,例如我正在循环中传递的部分,因此我不能传递“-v”。 更新:这发生在像这样的脚本中;

  • 我能够通过使用下面这个问题的注释提供的代码来解决这个问题。所有其他帖子都是有效的! 我使用的有用的东西来自第一个评论。虽然提供的所有示例代码似乎也是有效的!

  • 我是使用Jsoup的新手,我遇到了一个问题,无法从类名text为字符串的div中获取文本值。这是一个想要丢弃的字符串。 谁能帮帮我。非常感谢。