2011-07-21 65 views
1

有没有办法设置用于解析字符串日期的默认DateFormat类?如何在Java中设置全局默认日期格式?

我的背景:我从JDBC读取日期值的异常,因为日期字符串不是预期的格式。

(文字加在2011-07-22):

看来我需要精确我的问题描述:我一起用国外的,专有的数据库专有的JDBC驱动程序。不可能知道甚至改变数据库端的列类型。当我尝试通过ResultSet.getDate()或ResultSet.getObject()读取ResultSet列时,JDBC驱动程序内会触发一些异常,如“1999年7月10日不是有效日期”。我想通过设置一些适当的全局默认日期格式来避免这种内部异常。也许我需要首先实现一些自定义Locale并安装Locale全局?

+0

这是在应用程序服务器还是独立应用程序 – djna

+0

如何从JDBC中读取日期?你从那里得到哪种格式? – AlexR

+2

数据库中的日期如何显示?为什么你将它们作为字符串而不是java.sql.Date或JDBC.sql.Timestamp? – Olaf

回答

4

您可以设置默认的区域设置:

Locale.setDefault(Locale.US); 

或者,你可以使用它接受一个Locale只得到您感兴趣的区域设置的格式DateFormat静态方法之一。如果你的约会。格式与标准格式不匹配,您需要创建自己的SimpleDateFormat(基于模式),并确保始终使用该格式而不是默认格式。

+0

区域设置很明显。他问日期格式。 – AlexR

+1

@AlexR:我对“默认DateFormat类”的理解是“DateFormat”的静态方法返回的格式,它只依赖于当前的Locale。 @布隆龙,如果这不是你的意思,让我知道,我可以删除答案。 – OpenSauce

+0

我想如果将有一些具有拟合日期格式的地区(应该是“dd MMM yyyy”),则设置默认的Locale _could_ work。是否有可能派生自定义语言环境并安装它? – blerontin

6

应该完全不需要这个。使用

日期应存储在DB作为DATEDATETIMETIMESTAMP场,取决于DB和你想存储的信息(如日期或只有日期和时间的组合),而不是作为一个VARCHAR什么。这种特定于日期的字段将覆盖下的值基本上以整数/长度存储,其历元时间作为值存储。

假设你使用诸如DATETIMETIMESTAMP,那么你应该将其保存在数据库中使用PreparedStatement#setTimestamp()日期+时间字段类型。这里有一个例子,假设date变量是java.util.Date类型:

preparedStatement.setTimestamp(1, new Timestamp(date.getTime())); 

你应该从数据库中使用ResultSet#getTimestamp()它返回一个Timestamp这又是java.util.Date子类来检索它们,所以你可以只安全上溯造型它:

Date date = resultSet.getTimestamp("columnname"); 

至于解析/格式化从/ java.util.Date对象转换为人类可读的格式String,这应该在技术上发生在观看侧,而不是在持久层。究竟怎么做依次取决于所使用的视图/ UI技术/框架,如Swing,JSP,JSF,Struts2,Spring-MVC等等。由于您的问题不清楚您正在使用哪一个,因此无法给出合适的答案。一般来说,它们都使用SimpleDateFormat API。你甚至可以以原始形式使用它。

+0

不幸的是,我不知道数据库层上的确切列类型,并且没有可能改变它。这是我接口的一些外国遗留数据库。我已经更新了关于这个的描述。 – blerontin

相关问题