LocalDate - 如何在LocalDate中去除字符'T'

19

如何从我的localDate中去除T?

我需要去掉'T'以匹配数据库中的数据。

这是我的代码:

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

String strLocalDate = patientDiagnosisByDoctor.getDiagnosisDateTime().toLocalDateTime().toString();

LocalDateTime localDate = LocalDateTime.parse(strLocalDate, formatter);

System.out.println(localDate);

我收到了这个输出:
2015-10-23T03:34:40

什么是去除'T'字符的最佳方法?有什么想法吗,伙计们?

4
使用DateTimeFormat - MadProgrammer
2
在我的数据库中匹配数据?你的日期存储为 VARCHAR 吗??? - Andreas
@Andreas 我正在MySQL中使用datetime。 - SkyvrawleR
7
除非您使用字符串拼接构建 SQL 并容易受到 SQL 注入攻击的影响,否则数据库将永远不会看到或返回带有“T”的值,因为您正在通过 JDBC 调用发送/接收时间戳(Timestamp)值,因此您的问题是没有意义的。 - Andreas
@Andreas 没错,非常感谢。 - SkyvrawleR
3个回答

24
什么是最好的方法去除 'T' 字符?大家有任何想法吗?
使用 DateTimeFormatter 格式化 LocalDateTime 的值,以您想要的方式呈现...
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss", Locale.US);

String strLocalDate = "2015-10-23T03:34:40";

LocalDateTime localDate = LocalDateTime.parse(strLocalDate, formatter);

System.out.println(localDate);
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localDate));
System.out.println(DateTimeFormatter.ofPattern("HH:mm:ss yyyy-MM-dd ").format(localDate));

打印以下代码的输出结果:

2015-10-23T03:34:40
2015-10-23 03:34:40
03:34:40 2015-10-23 

请记住,日期/时间对象只是一个容器,用于记录自某个固定时间点(例如Unix纪元)以来经过的时间量,它们没有自己的内部/可配置格式,通常使用当前语言环境的格式。
相反,当您想要呈现日期/时间值时,应首先使用DateTimeFormatter将日期/时间值格式化为所需格式,然后显示它。

我需要删除“T”以匹配我的数据库中的数据。

哎呀,错过了那一部分。
在这种情况下,您应该将您的日期/时间值转换为使用java.sql.Timestamp,并使用PreparedStatement来插入/更新它们。

有什么办法可以去掉末尾的“.0”吗? 2015-10-23 03:34:40.0 <--- - SkyvrawleR
2
substring(),但你从哪里获取该值?到目前为止未显示任何能够做到这一点的东西。 - Andreas
从sql.timestamp,不要紧,MySQL没有检测到。谢谢您先生。 - SkyvrawleR
2
建议:通常情况下你要更改格式,但是在你的情况下,你不需要它,你只需要使用Timestamp并让数据库自行处理。 - MadProgrammer
2
@Andreas 为什么不直接更改格式说明符呢?请注意,在向数据库插入值时,您只需要使用时间戳,让数据库自己操心就好了 :P - MadProgrammer
@MadProgrammer 兄弟,你说的我们都懂。在构建 SQL 时永远不要使用字符串拼接,而是应该使用 PreparedStatement。这样可以避免格式问题和 SQL 注入漏洞。这就是为什么我的“答案”只有一个词了。;-) - Andreas

5
    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", " ");
    System.out.println(replace);

2018年9月13日 00:00


3
使用 Joda-Time 库的简单选项。
new LocalDateTime(DateTimeZone.forID("Europe/London")).toString().replace("T", " ");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接