6

我正在考虑使用Joda-Time
我想知道我是否应该注意我的接口返回的对象类型。
从我在服务层的接口签名中返回 Joda-Time 对象意味着使用它的每个模块都将依赖于 Joda-Time 而不是常见的java.util.Date API。
您是在 App 模块周围传递 Joda 对象,还是在应用程序的特定部分编写包装器?

4

4 回答 4

4

什么是替代方案?将 jodaTime 对象转换为臭名昭著的日历/日期对象?

您选择摆脱这些对象,这是一个不错的决定。现在,如果您让其他层使用 java date API,它们将进入您使用 jodaTime 消除的那种错误和无意义的行为。

我认为您应该帮您的用户一个忙,让他们使用 jodaTime。

当然,这是一个设计决定,会在他们的代码中添加对 jodaTime 的依赖,但我认为这没有问题,因为您选择 jodaTime 来编写更少更好的代码,他们也应该如此。

于 2010-03-12T13:17:27.133 回答
4

一开始,只返回最合适的类型(本例中为 Joda Objects)。

如果您得知有人对此有问题(这可能不会经常发生),请在接口中添加一个转换器方法(例如,getTime()现在您有,getJavaTime()或者getTimeInMillis())。

或者添加一个通用的辅助方法,它接受一个对象(您可以将未知实例视为Object代码中的任何地方,而不必导入实际的 Joda 类)并返回一个普通的 Java 对象(java.util.Date)。

于 2010-03-12T13:18:52.057 回答
0

根据您期望客户端库对您的 api 执行的操作,您可以选择使用毫秒时间戳。所有其他都是可能值得或可能不值得传递的表示。如果您的库旨在以人类可理解的方式帮助表示日期和时间,请使用 Joda,它在 Java8 中的工作方式可能大致相同。如果您的图书馆更喜欢计算日期,只需以毫秒为单位交换时间,然后让客户使用他们喜欢的任何东西。

于 2013-12-22T08:24:38.050 回答
0

现在:乔达时间

尽可能使用Joda-Time。在需要与其他不熟悉 Joda-Time 的类交换数据的地方转换为 java.util.Date。

要从java.util.Date转到org.joda.time.DateTime,请将 Date 传递给 DateTime 构造函数:

DateTime myDateTime = new DateTime( myDate );

要从 DateTime 转到 Date,请调用以下toDate方法:

Date myDate = myDateTime.toDate();

未来:JSR 310

Java 8 带来了由 JSR 310 定义的 java.time.* 类。这些类受到 Joda-Time 的启发,但完全重新架构。

如果您的项目仅在 Java 8 或更高版本中使用,请使用这些而不是 Joda-Time。Joda-Time 在旧版本的 Java 上仍然有用,并且 Joda-Time 仍在维护中。但是 java.time.* 类旨在取代 Joda-Time 和 java.util.Date/Calendar 类。

随着其他类和框架的更新以用 java.time.* 替换它们对 java.util.Date/Calendar 的使用,您的问题最终将变得毫无意义。

于 2013-12-22T08:03:33.680 回答