복붙노트

[SPRING] LocalDateTime에서 'T'를 제거 할 수 없습니다.

SPRING

LocalDateTime에서 'T'를 제거 할 수 없습니다.

문제는 다음과 같습니다.

    @GetMapping("/main/search")
    public String search (@RequestParam String departure,
                          @RequestParam String arrival,
                          @RequestParam String departureTime,
                          Model model) {

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        departureTime+=" 00:00:00"; 
        LocalDateTime date = LocalDateTime.parse(departureTime, formatter);

        List<BusFlight> busflights = busFlightService.search(departure, arrival, date);

형식은 2015-10-23T03 : 34 : 40과 같습니다.

내가 이런 식으로 문제를 풀려고 할 때 :

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.US);
        departureTime+=" 00:00:00";  
        LocalDateTime date = LocalDateTime.parse(departureTime, formatter);
        String currentDate = date.format(formatter);

        List<BusFlight> busflights = busFlightService.search(departure, arrival, currentDate);

나는 다른 곳에서 문제를 겪는다. Java는 내 서비스 calass에서 LocalDateTime을 String 유형으로 변경해야합니다.

public List<BusFlight> search(String departure, String arrival, **LocalDateTime** departureTime)* 
{
    *LocalDateTime departureTimeTho = departureTime.**plusDays(1)**;*

LocalDateTime을 String으로 변경하면 plusDays (1) 메서드를 사용할 수 없습니다. (((

그리고 나는 또한이 방법을 시도했다.

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
        departureTime+="T00:00:00";
        LocalDateTime date = LocalDateTime.parse(departureTime, formatter);

형식은 문자 'T'와 동일합니다. 2018-09-13T05 : 42 : 28

이 방법은 나를 위해 일하지 않습니다.

 String localTime = "2018-09-13 00:00:00";
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
       LocalDateTime date = LocalDateTime.parse(localTime, formatter);
     String replace = date.toString().replace("T", " ");

왜냐하면 나는 타입을 String으로 바꿀 수 없기 때문이다.

그리고 예외적으로 작동하지 않는이 방법 : Unsupported field : OffsetSeconds

String localdatetime = "2011-05-01";
        localdatetime+="T00:00:00";
        DateTimeFormatter date = DateTimeFormatter.ofPattern("yyyy-MM-ddXXX:mm:ss", Locale.US);
        LocalDateTime mzt = LocalDateTime.parse(localdatetime);
        System.out.println(mzt.format(date));

도와주세요! 문제를 어떻게 해결할 수 있습니까?

제 스크린 샷을 확인해주세요.

내 컨트롤러

내 서비스

내 저장소

내 데이터베이스 설계서

내보기

해결법

  1. ==============================

    1.LocalDateTime에는 T가 없습니다. 날짜 시간 객체에는 "형식"이 없습니다.

    LocalDateTime에는 T가 없습니다. 날짜 시간 객체에는 "형식"이 없습니다.

    반면에 toString 메소드는 항상 날짜 - 시간 값을 나타내는 텍스트에 대한 ISO 8601 표준에 따라 T가있는 문자열을 생성합니다. toString 메서드 나 그 동작을 변경할 수 없습니다.

    T를 얻는 것을 피하는 방법은 직접 또는 간접적으로 toString 메서드를 호출하는 것을 피합니다. 즉, LocalDateTime 객체를 인쇄하지 말고 문자열 연결에 사용하지 마십시오.

    지금까지 언급 한 사실들은 게시 한 코드에 전혀 해를 끼치 지 않으므로, 당신이 그것을 배우는 것이 좋습니다.

    편집 : 주석에서 링크 된 처음 두 개의 스크린 샷을 올바르게 읽으면 디버거가 T가있는 LocalDateTime 객체를 보여줍니다. 디버거도 LocalDateTime.toString을 호출합니다. 내 디버거가 그 일을하지 못하게하고 따라서 T를 보여줄 수있는 방법이 없으므로, 당신도 거기에있을 것이라고 기대하지 않습니다. 당신은 잘못된 문제와 싸우고 있습니다. 그 일을 그만하고 그걸로 생활하는 법을 배우는 것이 좋습니다.

    BusFlightService.search의 마지막 인수로 LocalDateTime을 전달해야합니다 (출발과 도착도 날짜 및 / 또는 시간이라면 문자열이 아닌 해당 날짜 / 시간 유형을 사용하는 것이 좋습니다). 따라서 메서드 내에서 plusDays를 사용할 수 있습니다 (및 유사한 이점).

    어떤 시점에서 LocalDateTime을 사용자에게 제시해야하는 경우 사용자가 T를 보지 않으려는 것이 맞습니다. DateTimeFormatter를 사용하여 모든 형식의 텍스트를 생성 할 수 있습니다. 이 클래스는 LocalDateTime 객체를 나타 내기 위해 생성되는 텍스트를 현지화 할 수도 있습니다.

        LocalDateTime dt = LocalDateTime.parse("2015-10-23T03:34:40");
        DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
                .withLocale(Locale.forLanguageTag("ru"));
        System.out.println(dt.format(formatter));
    

    산출:

    이제는 T가 없습니다 (단, окт 제외). 내부적으로 프로그램에서 항상 LocalDateTime 또는 다른 적절한 날짜 - 시간 클래스를 사용하십시오. 프리젠 테이션을 위해서만 문자열을 사용하십시오.

    이러한 분리는 컴퓨팅에서 널리 사용되며 권장됩니다. 한 쪽은 모델과 비즈니스 로직 사이에, 다른 쪽은 사용자 인터페이스와 프리젠 테이션 사이입니다.

    추신 : 출발 시간을 2015-10-23 (yyyy-MM-dd)과 같은 문자열로 받으면 문자열을 LocalDateTime으로 변환하기 위해 수정할 필요가 없습니다. 대신 LocalDate를 사용하거나 다음과 같이 변환하십시오.

        String departureTime = "2015-10-23";
        LocalDateTime dt = LocalDate.parse(departureTime).atStartOfDay();
    
  2. ==============================

    2.그냥 인수로 전달한 T 문자를 제거하십시오.

    그냥 인수로 전달한 T 문자를 제거하십시오.

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd**'T'**HH:mm:ss", Locale.US);
    

    이 링크에서 도움을 받으려면 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html을 참조하십시오.

  3. ==============================

    3.내가 아는 한, 당신은 당신 자신의 문제를 해결했습니다.

    내가 아는 한, 당신은 당신 자신의 문제를 해결했습니다.

    나는 제안한다.

    "검색"방법을 요청할 때 다른 매개 변수를 사용할 수 있습니다. 다른 매개 변수는 DateTimeFormatter 포맷터이므로 길을 사용할 수 있습니다.

    LocalDateTime departureTimeTho = departureTime.plusDays(1);
    String date = departureTimeTho.format(formatter)
  4. from https://stackoverflow.com/questions/52311884/can-t-rid-of-t-in-localdatetime by cc-by-sa and MIT license