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

Spring@RequestParam DateTime格式为ISO 8601日期可选时间

卢光誉
2023-03-14

我使用Spring Framework作为我的服务API,使用org.joda.time.datetime作为日期时间解析。具体地说,我使用的是isoFormatter.dateOptionalTimeParser(),它允许用户灵活地只使用日期,或者同时使用日期和时间,这是一个要求。

我尝试过使用@datetimeformat(iso=iso.date_time)的多种变体,以及在format中指定patter字符串,但无论如何都没有成功。

@RequestMapping(value = URIConstants.TEST_URL, method = RequestMethod.GET)
public @ResponseBody String getData(@RequestParam(required = false) DateTime from,
                                    @RequestParam(required = false)  DateTime to)  {
    return dataService.fetchDataFromDB(from, to);
}

我应该做什么来确保我从用户那里获得的日期符合ISO 8601DateOptionalTime格式?我可以应用多个模式来实现它吗?

共有1个答案

淳于慎之
2023-03-14

您还可以创建一个转换器,这将处理它。我在下面的示例中使用了OffsetDateTime,但它可以很容易地替换为localDateTime。有关详细文章,请参阅以下网址:http://www.baeldung.com/spring-mvc-custom-data-binder

就连我也挣扎了一段时间,但它并不起作用。诀窍是使用@component注释并为我做到了这一点。

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

@Component
public class OffsetDateTimeConverter implements Converter<String, OffsetDateTime> {

    @Override
    public OffsetDateTime convert(final String source) {

        if (source == null || source.isEmpty()) {
            return null;
        }

        return OffsetDateTime.parse(source, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }
}
 类似资料:
  • 问题内容: 我将Spring Framework用于我的服务API和日期时间解析。具体来说,我使用,它使用户可以灵活地仅使用日期,或者同时使用日期和时间,这是必需的。 相信我,我已经看到了所有这些我可以告诉人们的相关问题,例如this和this等等。 以前,我以日期为准,然后在服务层中使用上面提到的joda格式化程序处理日期,但是现在我想在控制器中添加请求验证,这意味着如果请求在语法上不正确,则该

  • 因此,有一个关于web应用程序的部分,用户可以向其中输入事件,web服务将这些事件以以下格式发送到移动应用程序: 我在尝试将字符串转换为日期时遇到了问题,这样我就可以从事件中获得时间(也可以在正确的时区中格式化),例如,这里有一个出现在“2015-03-20T20:00:00-07:00”上的字符串,当我拉动时,时间应该是太平洋时间1PM。但我得到的不是8PM就是3AM(这取决于我是否将UTC缩写

  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 有没有办法将ISO8601日期与Java进行比较?比如,知道字符串日期是否是良好的格式,知道月份是否为负数,以及 我还在搜索如何知道互联网上是否有课程可以比较两个ISO8601日期?比如,如果我有:2000-12-12和1999-05-06。我如何比较这两个日期,使之在年、月和日之间有准确的差异?

  • 问题内容: 我正在尝试使用Jackson 将ISO8601格式的日期反序列化为Java8 。我向ObjectMapper注册了JavaTimeModule,并关闭了该设置。 但是,如果尝试反序列化,它将无法正常工作,因为JavaTimeModule似乎只会反序列化具有UTC时区偏移量的日期时间(例如)。然后,我尝试使用如下注释: 像这样: 但是,这些都不起作用,我得到一个例外: 这意味着将忽略ti

  • 我正在尝试使用Jackson将ISO8601格式的日期反序列化为Java8。我向ObjectMapper注册了JavaTimeModule,并关闭了设置。 但是,如果试图反序列化将不起作用,因为JavaTimeModule似乎只会反序列化使用UTC时区偏移量格式化的日期时间(例如)。然后我尝试使用注释,如下所示: 就像这样: 然而,这两种方法都不起作用,我得到了一个例外: 这意味着timezone