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());
所以这里的问题是我不想在响应中显示/发送毫秒.我想显示/发送日期,如2015-07-29 16:23:28
我尝试了格式化程序,但它失败了,因为它给了字符串,我不想将LocalDateTime对象更改为String,因为这会导致所有Java应用程序发生重大变化.所以想找到解决方案
任何人都可以知道任何解决方案.
Pet*_*rey 72
您可以尝试这样做以减少任何小于秒
ldt = ldt.truncatedTo(ChronoUnit.SECONDS);
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));
  }
}
输出:
2015-07-30T16:29:11.684
2015-07-30T16:29:11
为 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
以上行为可能导致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));
        }
    }
}
日志截图
使用 DateFormatter 记录日志
没有 DateFormatter 的日志(仅使用truncate或withNano(0))
观察这里缺少的秒数!
| 归档时间: | 
 | 
| 查看次数: | 30463 次 | 
| 最近记录: |