在Java中使用UCanAccess驱动程序时,我发现将日期输出为特定格式非常困难。目前,我正在使用PreparedStatement.setDate()方法,该方法要求日期格式为[yyyy-MM-dd HH:mm:ss]。当用户打开文件时,结果输出也采用这种格式。
编辑* - 我没有使用带有格式化日期的setDate()方法,此方法只接受没有格式化的Java Date对象。我打算写的是我在处理格式化日期时使用setString()方法,但UCanAccess要求此日期字符串格式为[yyyy-MM-dd HH:mm:ss]。我真的只想弄清楚如何在调用setString()之后将其提供给不同的格式或更改格式。
到目前为止一切都很好,但现在我需要提供各种格式的日期文件,例如[MM-dd]。我可以通过使生成的Access字段键入备注或文本来完成此操作,但问题变为当我需要日期为该格式并且仍然将生成的Access字段类型设置为日期/时间时。
我注意到UCanAccess front page,它提到支持访问日期格式,但在几次Google搜索之后,我没有找到任何示例。任何人都知道如何使用此驱动程序格式化日期,同时保持正确的日期/时间类型?
提前致谢!
答案 0 :(得分:4)
通过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#
。但是,你几乎不应该需要在查询中包含日期文字,因为您应该使用带有PreparedStatement
参数的.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设置为使用&#34;英语(美国)&#34;的默认格式。我们看到
如果我们将Windows中的格式设置更改为&#34;英语(英国)&#34;然后我们看到
如果我们想要为一个或多个字段使用特定格式,我们需要在Access中使用特定的格式设置,例如,使用类似的内容
我们看到了