【问题标题】:How can I set the global default date format in Java?如何在 Java 中设置全局默认日期格式?
【发布时间】:2011-07-21 15:25:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这是在应用服务器还是独立应用中
  • 您如何从 JDBC 读取日期?你从那里得到哪种格式?
  • 日期在您的数据库中是如何显示的?为什么将它们作为字符串而不是从 JDBC 获取的 java.sql.Date 或 java.sql.Timestamp?

标签: java date jdbc


【解决方案1】:

您可以设置您的默认语言环境:

Locale.setDefault(Locale.US);

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

【讨论】:

  • @AlexR:我对“默认 DateFormat 类”的理解是 DateFormat 的静态方法返回的格式,它只依赖于当前的 Locale。 @blerontin,如果这不是你的意思,请告诉我,我可以删除答案。
  • 我想如果有一些具有合适日期格式的区域设置(应该是“dd MMM yyyy”),设置默认区域设置可以工作。是否可以派生自定义语言环境并安装它?
  • 实际上,通过使用DateFormat.getAvailableLocales() 浏览所有已实现的语言环境,我找到了一个适合我所需的默认日期格式(en_MT)的现有语言环境。所以这个技巧解决了我的问题!
  • @blerontin:好的,我很高兴它有帮助,虽然现在我更好地理解了你的问题,我同意 BalusC 真的没有必要!很明显,数据库本身存在问题,尽管您对此无能为力。
【解决方案2】:

应该完全不需要这个。

日期应作为DATEDATETIMETIMESTAMP 字段存储在数据库中,具体取决于使用的数据库和您要存储的信息(例如仅日期或日期和时间组合),而不是作为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。你甚至可以以原始形式使用它。

【讨论】:

  • 不幸的是,我不知道数据库层的确切列类型,也无法更改它。这是我正在与之交互的一些外国遗留数据库。我已经更新了关于它的描述,现在。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 2010-09-22
  • 2013-10-09
  • 2019-05-15
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多