我有一个带有多个日期属性的简单java对象,我似乎总是改变我对如何定义它们的想法。属性应该定义为日期对象还是字符串?该对象将用于struts 1.3应用程序,其中iBatis作为持久层,mysql作为数据库。数据库列定义为datetime,它们可能为null,我通常不关心时间部分。
public Date getForcastDate();
或
public String getForcastDate();
现有的大多数代码库都使用字符串,但这对我来说似乎并不合适。
答案 0 :(得分:6)
将日期保持为Date
秒。这样,您可以根据区域设置更改格式,检查无效日期,按类别排序等。
通过将它们保留为字符串,您可能会丢弃数据(例如,如果格式化程序不使用它们,则为毫秒)和绝对行为。
使用强类型(例如将它们保留为Date
)将有助于开发。你的方法签名变得更加清晰,使用IDE工具进行重构变得更容易等。否则你最终得到的API除了字符串之外什么都不说话,混淆参数是微不足道的,而且无法弄清楚正在发生什么。
提示:查看Joda-Time作为标准java.util.Date
的更好替代方案。
答案 1 :(得分:1)
我会使用Date对象,因为它更清晰,可以存储Date并在需要时将其转换为String。否则,您必须将格式化日期硬编码到字符串字段中。
答案 2 :(得分:1)
我永远不会在这个cas中使用Strings,就像今天的8/3/11或3/8/11或2011-03-08一样。这实际上是尝试对变量使用最严格的类型/类的特定情况。这样您就可以更全面地了解其行为,既可以使用受限制的或专门的方法,也可以帮助使用其他类的文档。在此处使用日期将允许您使用Calendar对象添加日期或月份。只需要为输入和输出完成对字符串的转换。
在实践中如果它们只是日期我会创建我自己的Date类,所以可以忽略时间或使用JodaTime提供比java Date更容易的操作
答案 3 :(得分:1)
在我的代码中,我总是使用最高级别的对象。在这种情况下,我建议 - 日历。以下是关于Date and Calendar的单独讨论。我一直认为这样 - 将Calendar / Date转换为String很简单 - 使用SimpleDateFormatter。但通常你需要对日期做一些事情(添加几天或几小时,减去一年,处理时区等),然后每次你必须将它从String转换为Calendar / Date。
答案 4 :(得分:0)
日期,如果你必须,但java.util.Calendar现在可能更合适。使用String,您必须担心像@jzd提到的格式。使用日历,您可以轻松切换格式。此外,日历可让您通过Calendar.getTime()
获取日期