在API中使用java.util.Date的好理由

Jam*_*ven 11 java date java.util.date

是否有任何特定原因在API中使用Date类(例如,在员工出生日期字段中)而不是long或Long.

有一些关于这个的讨论: java-date-vs-calendar,但我想知道是否有任何理由使用Dates,当long(或Long)似乎更简单.

当然我会使用TimeZone和SimpleDateFormatter在GUI中解析和显示日期,也可能使用Calendar来执行操作,但我只关心这个问题中数据模型/ API中日期的存储和表示.

更新:我不选择Date的一个原因的例子是它是可变的.因此,如果我在API中公开Date,调用者可以调用setTime(long),这似乎违反了基本封装.对我而言,这似乎超过了使用Date提供的额外清晰度的好处,因为我可以调用long属性timeInMillisecondsSinceEpoch并将相同的信息传递给调用者.

Pau*_*sik 5

如果您使用整数来表示API中的日期,那么您将添加一个额外的,不必要的复杂层,需要额外的文档并使您的API更难使用.

通过使用整数,您必须让客户端知道基准日期是什么,您正在测量什么(例如秒,毫秒,分钟等?)并强制客户端进行转换.在API中保留Date对象可以使IMO更简单,更友好.除非出于任何原因,否则会有非常严重的性能影响,我建议将日期保留在API中,即使您需要在内部进行更多编码.这是使一个好的API成为一个好的API的事情之一......不会让你的客户端跳过篮球.


Ale*_*dam 1

该类Date是 API 的一部分,因此如果它符合您的目的,那么它是一个有效的选项。其中有许多已弃用的方法已被该类替换Calendar,因此请确保避免使用这些方法。

答案将取决于您需要完成什么。如果您只需要按日期排序,along就足够了。值Date会增加一些可读性,但不会增加更多功能。使用Date也不会有害,所以应该考虑可读性因素。

如果该字段是私有的,您实际上可以将其存储为 long 并拥有一个使用以下方法的 getter 和 setter Date

private long mDOB;

public Date getDOB () { return new Date(mDOB);}
public void setDOB (Date dob) { mDOB = dob.getTime(); }
Run Code Online (Sandbox Code Playgroud)