当您通过 UCanAccess 检索日期/时间字段值时,您将获得一个java.sql.Timestamp
对象。它包含日期/时间值,但它本身没有格式。
如果您想以特定方式表示该日期/时间值,您只需根据自己的喜好对其进行格式化。可能最简单的方法是使用java.text.SimpleDateFormat
. 例如:
try (ResultSet rs = s.executeQuery("SELECT DateJoined FROM Members WHERE MemberID=1")) {
rs.next();
System.out.printf(
" \"raw\" value (via .toString()): %s%n",
rs.getTimestamp(1).toString());
SimpleDateFormat mmddFormat = new SimpleDateFormat("MM-dd");
System.out.printf(
"formatted value (via SimpleDateFormat): %s%n",
mmddFormat.format(rs.getTimestamp(1)));
}
给我们
"raw" value (via .toString()): 2014-01-23 00:00:00.0
formatted value (via SimpleDateFormat): 01-23
(请注意,当 UCanAccess 页面谈到“访问日期格式”时,它指的是包含在哈希标记中的日期/时间文字,如下所示:#11/22/2003 10:42:58 PM#
。但是,您几乎不需要在查询中包含日期文字,因为您应该使用aPreparedStatement
带有适当的.setTimestamp()
参数。)
附录
同样,在将日期/时间值插入 Access 数据库时:Java 中日期/时间值的格式对日期/时间值在 Access 中的存储方式(前提是正确解释)和方式没有影响。它在 Access 中的显示是 Access 中格式设置的一个功能。例如,如果我们运行以下 Java 代码
try (Statement s = conn.createStatement()) {
s.executeUpdate(
"INSERT INTO tblDates " +
"(ID, mmddyyyy) " +
"VALUES " +
"('literal', #12/25/2014#)"
);
}
SimpleDateFormat mmddyyyyFormat = new SimpleDateFormat("MM/dd/yyyy");
Timestamp mmddyyyyXmas =
new Timestamp(mmddyyyyFormat.parse("12/25/2014").getTime());
SimpleDateFormat ddmmyyyyFormat = new SimpleDateFormat("dd/MM/yyyy");
Timestamp ddmmyyyyXmas =
new Timestamp(ddmmyyyyFormat.parse("25/12/2014").getTime());
SimpleDateFormat yyyymmddFormat = new SimpleDateFormat("yyyy/MM/dd");
Timestamp yyyymmddXmas =
new Timestamp(yyyymmddFormat.parse("2014/12/25").getTime());
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO tblDates " +
"(ID, mmddyyyy, ddmmyyyy, yyyymmdd) " +
"VALUES " +
"('parameters', ?, ?, ?)"
)) {
ps.setTimestamp(1, mmddyyyyXmas);
ps.setTimestamp(2, ddmmyyyyXmas);
ps.setTimestamp(3, yyyymmddXmas);
ps.executeUpdate();
}
然后打开 Access 数据库,将 Windows 设置为使用“英语(美国)”的默认格式,我们看到
如果我们将 Windows 中的格式设置更改为“English (United Kingdom)”,那么我们会看到
如果我们想为一个或多个字段使用特定格式,我们需要在 Access 中使用特定的格式设置,例如,像这样
我们看