这是问题所在:
@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
我仍然没有得到一个明确的答案,我并没有理解它;(((