java - java - 如何更改从java中的数据库接收到的日期时间的显示格式
问题描述
我使用此代码将 util 更改为 sql,但记录发生在秒和另一个值之后
String insertAttendence = null;
insertAttendence = "INSERT INTO ATTENDANCE (PRSN_ID,DATE,ARRIVAL,DEPART,DATE_ARRIVAL_FROM,DATE_DEPARTURE_TO) VALUES (?,?,?,?,?,?)";
PreparedStatement psAttendence = null;
psAttendence = dbConnection.prepareStatement(insertAttendence);
psAttendence.setInt(1, personIdForGraphics.intValue());
java.sql.Date sqlDate = new java.sql.Date(dates.get(i).getTime());
psAttendence.setDate(2, sqlDate);
在数据库中保存为2019-07-26 11:53:18.0,我想保存为2019-07-26 11:53:18,怎么改?
解决方案
你不想
您不希望datetime
数据库中的 具有特定格式。除了最简单的一次性程序外,其他所有程序的良好做法是将用户界面与数据模型分开。datetime
属于你的模型的价值,所以保持你datetime
在那里,永远不要让用户直接看到它。当您坚持这一点时,datetime
数据库中的格式就无关紧要了。每当用户应该看到日期时,将其格式化为 aString
并向用户显示字符串。同样,如果您需要特定格式与另一个系统进行交换,请为此目的将日期时间格式化为字符串。如果用户需要输入日期和/或时间,要么接受字符串,要么使用日期选择器或时间选择器。
你不能
正如@GuidoG 在评论中已经说过的那样,日期时间以某种我们不知道也不应该关心的内部格式存储在数据库中。肯定不是2019-07-26 11: 53: 18.0
你报的那个。您可能已经在某些查询工具中看到过,或者由于从数据库中检索日期时间作为字符串的结果,我不知道。也可能是您可以配置查询工具以向您显示不同的格式。您可以datetime
将数据库中的 视为一天中的日期和时间,仅此而已。
简而言之,“格式”仅适用于日期时间的字符串表示,而不适用于日期时间本身。
java.time 和 JDBC 4.2
您使用的java.sql.Date
课程设计不佳且早已过时。此外,您的 JDBC 驱动程序应该将其视为没有时间的日期,并且大多数 JDBC 驱动程序都这样做(因此,您如何让代码以非零时间存储2019-07-26 11: 53: 18.0
有点奇怪)。
假设您要存储一个时间点(时间戳),请将您的数据库列更改为数据类型timestamp with time zone
,然后将一个存储OffsetDateTime
到其中。我假设这dates.get(i).getTime()
给了你自纪元以来的毫秒数。
OffsetDateTime dateTimeToSave = Instant.ofEpochMilli(dates.get(i).getTime())
.atOffset(ZoneOffset.UTC);
psAttendence.setObject(2, dateTimeToSave);
如果您无法更改数据类型,您可以LocalDateTime
使用相同的方式将 a 存储到数据库列psAttendence.setObject
中,但您必须确保自己LocalDateTime
在正确的时区获得 a,因为对象本身既不包含时区也不包含偏移量。建议使用 UTC。
教程链接: Oracle 教程:日期时间解释如何使用 java.time。
推荐阅读
- python - 使用 Python 替换 YAML 中的字符串
- java - 无法在 AppCompatActivity 中实现
- ios - 滚动后未填充 CollectionView
- awk - 如何基于 AWK 中的一列连接两个文件(使用通配符)
- vector - 八度索引超出范围错误。不知道为什么
- php - Laravel 5.7 邮件验证错误,路由[verification.verify] 未定义
- javascript - React + Express:代理错误:无法代理来自 localhstem_errors 的请求 /total
- amazon-web-services - 是否可以通过 Amazon Connect 向出站呼叫添加扩展?
- swift - 访问字典键/值时出现模棱两可的错误
- vb.net - 贴标机上打印的 Code39 不可读