[SPRING] LocalDateTime에서 'T'를 제거 할 수 없습니다.
SPRINGLocalDateTime에서 '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.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.그냥 인수로 전달한 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.내가 아는 한, 당신은 당신 자신의 문제를 해결했습니다.
내가 아는 한, 당신은 당신 자신의 문제를 해결했습니다.
나는 제안한다.
"검색"방법을 요청할 때 다른 매개 변수를 사용할 수 있습니다. 다른 매개 변수는 DateTimeFormatter 포맷터이므로 길을 사용할 수 있습니다.
LocalDateTime departureTimeTho = departureTime.plusDays(1); String date = departureTimeTho.format(formatter)
from https://stackoverflow.com/questions/52311884/can-t-rid-of-t-in-localdatetime by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 3.1 애플리케이션에서 JSF 관리 빈을 선언하는 방법은? (0) | 2019.07.16 |
---|---|
[SPRING] Spring의 CAS 서비스 속성에서 서비스 URL을 올바르게 설정하는 방법 (0) | 2019.07.16 |
[SPRING] ClassPathResource가 클래스 경로를 가져 오지 않습니다. (0) | 2019.07.16 |
[SPRING] Spring 구성 클래스에서 @Bean 메소드에 @Autowired가 필요하지 않은 이유는 무엇입니까? (0) | 2019.07.16 |
[SPRING] @PropertySource를 사용한 Spring 속성 설정 (0) | 2019.07.16 |