如何在Java中设置全局默认日期格式?

有没有办法设置用于将字符串解析为日期的默认DateFormat类?

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

(文字添加于2011-07-22):

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

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

Locale.setDefault(Locale.US); 

或者,您可以使用其中一个接受Locale的DateFormat静态方法来获取您感兴趣的Locale的格式。如果您的日期格式与标准格式之一不匹配,则需要创建拥有SimpleDateFormat (基于模式)并确保始终使用该模式而不是默认模式。

应该完全没有必要这样做。

日期应作为DATEDATETIMETIMESTAMP字段存储在DB中,具体取决于所使用的数据库和您要存储的信息(例如,仅限日期或日期和时间的组合),而不是VARCHAR或其他内容。 这样的特定日期字段将覆盖下的值基本上存储为整数/长,其中纪元时间作为值。

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

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

你应该使用ResultSet#getTimestamp()从数据库中检索它们,它返回一个Timestamp ,而Timestamp又是java.util.Date的子类,所以你可以安全地向上转换它:

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

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