Преобразование строковой даты в дату в JAVA - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над проектом загрузки 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 ]

2 голосов
/ 06 августа 2020

Вот решение, которое я нашел после поиска будущего, я использовал 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;  
    }
}
0 голосов
/ 06 августа 2020

В JShell (Java Version 14) Я запустил ваш код и смог получить аналогичные результаты (конечно, это в GMT, а не в UTC; однако секунды смещены на ту же величину, что и ваш текущий результат): enter image description here

If the question is about UTC:

I would suggest to use Instant, поскольку он позволяет избежать многих проблем, которые LocalDateTime представляли за эти годы. Как упоминалось в комментариях, обычно лучше избегать использования java.util.Date и использовать вместо него Instant (или вы можете использовать более традиционный LocalDateTime).

Если вы говорите о Spring ' s аннотированный @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. Так что это может быть полезно.

...