【发布时间】:2018-10-05 23:21:22
【问题描述】:
我的应用程序需要以下内容。
在我的应用程序中(在 struts 中),我们需要支持波斯日历。
当我们提交表单时,日期在 Action 类中以 String 的形式出现。我们需要将此日期以波斯格式保存在数据库中。我们已经为波斯日历配置了数据库。在从数据库用户检索数据时,应该只能看到波斯格式的日期。
此外,用户可以切换 2 种语言(英语、波斯语)。所以,应用程序应该支持两种类型的日历(公历和波斯)。如果用户用英语登录,公历应该是可见的。如果用户使用波斯语登录,那么波斯日历应该是可见的。
对于从公历到波斯的日期转换,我在下面使用: http://www.dailyfreecode.com/forum/converter-gregorian-date-jalali-date-20288.aspx
在上述要求中,我面临两个问题:
- 提交表单时,如何将日期(在 Action 类中为 String 格式)以波斯格式保存到 DB 中?
- 从 DB 检索数据时,它应该采用波斯语格式。截至目前,JDBC 客户端正在检索公历中的日期。
我正在传递 java.sql.Date(今天的日期),它以波斯格式保存在数据库中。使用下面的代码。
java.sql.Date sqlDate = null;
java.util.Date utilDate = new Date();
sqlDate = new java.sql.Date(utilDate.getTime());
PreparedStatement psmtInsert = conn.prepareStatement(insertQuery);
psmtInsert.setDate(1, sqlDate));
psmtInsert.executeUpdate();
用于检索:
PreparedStatement psmtSelect = conn.prepareStatement("select dateOfJoining from EMPLOYEE");
ResultSet resultSet = psmtSelect.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getDate(1));
}
但它以公历类型返回日期。
我们在 Tomcat/JVM/JDBC 客户端中是否有任何设置可以将从 DB 返回的日期转换为波斯格式本身(就像我们在 Oracle 中有 NLS_CALENDAR 、NLS_DATE_FORMAT 一样)?
对于第一个问题,如果我以波斯格式传递日期,那么在 DB 中它保存不正确。 PFB 我的代码:
java.sql.Date sqlDate = null;
java.util.Date utilDate = new Date("1397/02/04");
sqlDate = new java.sql.Date(utilDate.getTime());
PreparedStatement psmtInsert = conn.prepareStatement(insertQuery);
psmtInsert.setDate(1, sqlDate));
psmtInsert.executeUpdate();
以上是在 DB 中插入为 0777/09/13。
我们如何才能克服上述问题? 提前致谢。
【问题讨论】:
-
到底是什么问题?您不能将日期从公历转换为波斯?你知道怎么做,但你得到错误的结果?您不知道如何将日期从字符串转换为日期格式?请缩小您的问题范围,现在它太宽泛了,没有具体的问题说明。
-
实际时间是通用的,为什么不能直接保存日期为时间戳!!!然后根据需要转换为波斯语/格鲁吉亚语
-
@Psytho:关于第二期,我可以将日期以波斯格式保存在数据库中。但是在从数据库 JDBC 客户端获取公历格式的检索日期时。所以,我的问题是:我们有什么方法可以使用哪个 JDBC 客户端以波斯格式检索日期。附言这是一个现有的应用程序,因此我希望实现上述目标所需的更改最少。虽然,我可以将从 DB 返回的日期转换为波斯语,但这需要太多的努力。这就是为什么我需要另一种方法。
-
请添加一些代码,您如何向数据库提交日期,如何从那里检索它以及它的外观。
-
当你说
new Date("1397/02/04")(一个被弃用的构造函数,顺便说一句)“插入为 0777/09/13”时,你是如何确定的? Java 似乎已经解释了公历/儒略历中的“1397/02/04”(大约 18078422400000 毫秒 纪元之前),在“波斯历”中将是 777 年。如果你想要Java 要在其他日历中解释“1397/02/04”,那么您需要在存储之前将其转换为公历,然后在检索后将其转换回来。您在问题中引用的代码应该对此有所帮助,假设它是正确的。
标签: java oracle jdbc calendar jalali-calendar