Nit*_*wad 42 java database date java-8
我在Java应用程序中工作,我正在使用Java 8.
我已经集成了数据库(多个数据库Oracle,Mysql,Postgres)以及DB i中创建日期的字符串.
DB中的日期格式为 - 2015-07-29 16:23:28.143
我从DB获取此文件并在Localdatetime对象中设置
myObj.setCreated(rs.getTimestamp("created").toLocalDateTime());
Run Code Online (Sandbox Code Playgroud)
所以这里的问题是我不想在响应中显示/发送毫秒.我想显示/发送日期,如2015-07-29 16:23:28
我尝试了格式化程序,但它失败了,因为它给了字符串,我不想将LocalDateTime对象更改为String,因为这会导致所有Java应用程序发生重大变化.所以想找到解决方案
任何人都可以知道任何解决方案.
Pet*_*rey 72
您可以尝试这样做以减少任何小于秒
ldt = ldt.truncatedTo(ChronoUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
Mar*_*vin 59
只需将它们设置为0
:
myObj.setCreated(rs.getTimestamp("created").toLocalDateTime().withNano(0));
采样/证据:
import java.time.LocalDateTime;
public class DateTimeSample {
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
System.out.println(ldt.withNano(0));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2015-07-30T16:29:11.684
2015-07-30T16:29:11
Run Code Online (Sandbox Code Playgroud)
为 STRING 的工作人员提供代码和日志以Happy Family
在答案中发表评论,Marvin
!!! 我也陷入了同样的陷阱!
问题:
withNano(0)
truncatedTo(ChronoUnit.SECONDS)
如果秒数是这样的话,也会删除秒数(:00
在时钟上,秒针位于 12 点)
进一步扩展 Marvin 的示例输出
2015-07-30T16:29:11.684
2015-07-30T16:29:11
2015-07-30T16:31 // for actual time 2015-07-30T16:31:00.684
2015-07-30T16:31 // for actual time 2015-07-30T16:31:00.888
Run Code Online (Sandbox Code Playgroud)
以上行为可能导致BUG:
当您消除纳秒时,如果秒出现为:00
,则它们会跳过打印
解决:
public class WithNanoTest {
public static void main(String[] args) throws InterruptedException {
while (true) {
Thread.sleep(500);
DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
System.out.println("truncate :::: " + LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS).format(dtf));
System.out.println("withNano :::: " + LocalDateTime.now().withNano(0).format(dtf));
}
}
}
Run Code Online (Sandbox Code Playgroud)
日志截图
使用 DateFormatter 记录日志
没有 DateFormatter 的日志(仅使用truncate
或withNano(0)
)
观察这里缺少的秒数!
归档时间: |
|
查看次数: |
30463 次 |
最近记录: |