【问题标题】:Spring MVC: Convert String Date into Date over REST endpointSpring MVC:通过 REST 端点将字符串日期转换为日期
【发布时间】:2020-08-06 18:17:31
【问题描述】:

我正在开发 Spring Boot 项目,我想转换来自发布请求的字符串日期

D,100000001028686,BA0884,72087000000176,N,2,147568593,存款参考,2020-08-05 20:17:33.32691, 601123,ZAR,2500,57,24,i10c=0,i20c=2,i50c=5,iR1=2,iR2=5,iR5=8,iR10=200,iR20=1,iR50=55,iR100=60, iR200=82,0,0,0,0,000

我要转换的日期是粗体,需要将该部分从@PostMapping 方法请求参数转换为java.time 对象之一。

搜索后,我找到了一些数据的解决方案 if self 不使用Spring 但它对我不起作用并使用java.util.Date,这是我到目前为止编写的代码

    class Main {
      public static void main(String[] args) throws ParseException {
        String date = "2020-08-05 20:18:33.32692";
        System.out.println(covertDate(date)); //Wed Aug 05 20:19:05 UTC 2020
      }
    
       public static Date covertDate(String date) throws ParseException {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS");
            return formatter.parse(date);
        }
    }

得到的回复不是我想要的,有什么办法可以解决问题

【问题讨论】:

  • 不要再使用 SimpleDateFormat 和 java.util.Date。使用自 java 8 起可用的现代 java.time API
  • @Jens,请你澄清一下,就像把我放在正确的方向上,我会从那里开始
  • 请在就不起作用的代码寻求帮助时,准确说明预期结果以及观察到的结果有何不同。将任何错误消息粘贴到问题中。
  • 这能回答你的问题吗? Timestamp convert [duplicate]

标签: java spring-boot spring-mvc spring-annotations date-conversion


【解决方案1】:

这是我在寻找未来后找到的解决方案 我使用 Java 8 API 来解决它

 class Main {
  public static void main(String[] args) throws ParseException {
    String sDate6 = "2020-08-05 11:50:55.555";
    System.out.println(covertDate(sDate6)); //2020-08-05T11:50:55.555
  }

   public static LocalDateTime covertDate(String date) throws ParseException {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);
         LocalDateTime dateTime = LocalDateTime.parse(date,formatter);
         return dateTime;  
    }
}

【讨论】:

    【解决方案2】:

    JShell (Java Version 14) 中,我运行了您的代码并且能够获得类似的结果(当然它是 GMT 而不是 UTC;但是,秒数的偏移量与您当前的输出相同):

    如果问题是关于 UTC:

    我建议使用Instant,因为它避免了LocalDateTime 多年来提出的许多问题。正如 cmets 中所提到的,通常最好避免使用 java.util.Date 并改用 Instant(或者您可以使用更传统的 LocalDateTime)。

    如果你在谈论 Spring 的注释 @PostMapping 方法来自动解析日期,你可以使用类似的东西:

    @PostMapping
    public String postDate(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Long dateReq) {
      Instant date = Instant.ofEpochMilli(dateReq);
      System.out.println(date);
    }
    

    如果您想使用自定义格式化程序,您可以将@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSS" LocalDateTime date) 作为postDate 方法的参数。

    请注意Spring 的文档指出@DateTimeFormat 的模式字段使用与java.text.SimpleDateFormat 相同的模式。所以这可能是有用的。

    【讨论】:

    • 感谢@treedust 的回复。我马上去看看
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多