這是問題所在:
@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 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 busflights = busFlightService.search(departure, arrival, currentDate);
我在另一個地方遇到問題。 Java需要在我的服務calass中將類型LocalDateTime更改為字符串類型:
public List 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","");
因為無法將類型更改為字符串
而且由于異常,這種方式無法正常工作:不支持的字段: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));
請幫忙! 我該如何解決這個問題?
請檢查我的屏幕上有未解決的問題
我的控制器
我的服務
我的倉庫
我的數據采集器格式
我的觀點
我不明白您的確切問題。盡可能傳遞LocalDateTime或其他日期時間類型而不是字符串。您是正確的,DateTimeFormatter可以在沒有T和LocalDateTime的字符串之間進行轉換(要解析其中帶有T的字符串,只需使用一個參數LocalDateTime.parse并且不使用格式化程序)。
LocalDateTime中沒有T。它的toString方法生成的字符串中包含T,因此您無法避免這種情況。還有你為什么為了向用戶展示LocalDateTime,您當然應該使用DateTimeFormatter(例如,DateTimeFormatter.ofLocalizedDateTime(FormatSyle.MEDIUM))對其進行格式化。
我需要LocalDateTime使用方法plusDays(1)我無法解析為另一個DateTime還是可以?
您的問題已經顯示了如何解析為LocalDateTime并使用plusDays。很抱歉,我看不到您有任何問題。
可能相關:到ZonedDateTime的字符串正在更改格式
奧萊V.V.抱歉沒有得到它。可以給我更多信息嗎?
鏈接的問題是有關要ZonedDateTime以特定方式查看的(以秒和秒為單位)。如果我正確理解了您的問題,那么您正在要求以特定的方式(沒有T)查看LocalDateTime。這樣,我認為問題是相似的。如果不是您想要的,請忽略我的評論。
我之所以投票,是因為您似乎仍未嘗試解釋您認為T對您有何危害。如果您能說明這一點,那么我相信我們會更好地了解您的情況,并且我們可以提出一些建議。
偏移量" X"出現在ZonedDateTime中,而不是LocalDatetime中:
我得到異常:不支持的字段:OffsetSeconds
LocalDateTime中沒有T。日期時間對象沒有"格式"。
另一方面,根據ISO 8601標準,用于表示日期時間值的文本,其toString方法始終生成其中帶有T的字符串。您不能更改toString方法或其行為。
避免獲取T的方法是避免直接或間接調用toString方法。這也意味著:不要打印LocalDateTime對象,也不要在字符串連接中使用它。
到目前為止提到的事實對您發布的代碼沒有害處,所以我建議您學習實踐它。
編輯:如果我正確地閱讀了從您的評論鏈接到的前兩個屏幕截圖,則它們表明您的調試器顯示了帶有T的LocalDateTime對象。調試器也會調用LocalDateTime.toString。我無法阻止調試器執行此操作,因此無法顯示T,因此我也不希望您的調試器也存在。您正在解決錯誤的問題。我建議您停止這樣做,并學會忍受它。
您應該將LocalDateTime作為busFlightService.search的最后一個參數傳遞(如果出發和到達也是日期和/或時間,我建議您也為它們使用適當的日期/時間類型而不是字符串),這是正確的。這樣您就可以在方法內部使用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));
輸出:
23 окт. 2015 г., 3:34:40
現在沒有T(окт.中的т除外)。在程序內部,始終使用LocalDateTime或其他適當的日期時間類。僅用于演示使用字符串。
這種分離在計算中得到了廣泛的使用和推薦:一種是模型和業務邏輯之間的關系,另一種是用戶界面和表示之間的關系。
PS:另外,如果您以2015-10-23(yyyy-MM-dd)之類的字符串形式接收出發時間,則無需修改該字符串即可將其轉換為LocalDateTime。請改用LocalDate或進行如下轉換:
String departureTime ="2015-10-23";
LocalDateTime dt = LocalDate.parse(departureTime).atStartOfDay();
公共字符串搜索(@RequestParam字符串離開,@ RequestParam字符串到達??,@ RequestParam字符串離開時間,模型模型){LocalDateTime日期= LocalDateTime.parse(departureTime +" T00:00:00"); DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.forLanguageTag(" ru")));的System.out.println(date.format(格式化)); List busflights = busFlightService.search(出發,到達,日期); `
日期inde buger 2015-10-23T03:34:40
請檢查我的截圖.... plsss
首先[link](picshare.ru/view/9016752)
服務[鏈接] picshare.ru/view/9016759
存放區[鏈接] picshare.ru/view/9016761
DATAPICKER FORMAT [鏈接] picshare.ru/view/9016763
我的看法[鏈接] picshare.ru/view/9016765
" date inde buger 2015-10-23T03:34:40"是的,沒有辦法避免這種情況。看到我的編輯。由于注釋不允許格式化和縮進,因此我無法閱讀您注釋中的代碼。
據我所知,您已經以自己的方式解決了問題。
我建議:
當您請求"搜索"方法時,可以采用另一個參數。另一個參數是DateTimeFormatter formatter,因此您可以使用自己的方式:
LocalDateTime departureTimeTho = departureTime.plusDays(1);
String date = departureTimeTho.format(formatter)
在MySql Datebase類型DATETIME中,無法將類型更改為String becase
只需刪除您作為參數傳遞的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
我仍然沒有得到一個明確的答案,我并沒有理解它;(((