在JAVA中将字符串日期转换为日期

时间:2020-08-06 18:17:31

标签: java spring-boot date date-conversion

我正在从事Spring启动项目,我想转换来自发布请求的String日期

D,100000001028686,BA0884,72087000000176,N,2,147568593,DEPOSITREFERENCE, 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

我要转换的日期在Google上搜索后以粗体显示,但我发现了一些解决方案,但对我不起作用,这里是我到目前为止编写的代码

    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);
        }
    }

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

2 个答案:

答案 0 :(得分:2)

这里是我寻找未来后找到的解决方案 我用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;  
    }
}

答案 1 :(得分:0)

JShell (Java Version 14)中,我运行了您的代码,并能够得到类似的结果(当然,这是格林尼治标准时间而不是UTC;但是,秒数与您当前的输出偏移相同的量): enter image description here

如果问题与UTC有关:

我建议使用Instant,因为它可以避免LocalDateTime多年来提出的许多问题。如评论中所述,通常最好避免使用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相同的模式。这样可能有用。