我有一个对象有一些日期,我想将它们返回到getter中。问题是我需要做Date.toString();
因为我必须打印它们,当日期为空时,我得到一个NullPointerException
。Java,设置日期为0/0/0
我正在考虑在日期为空时返回日期0/0/0,但我不知道如何设置此值。有什么办法吗?就像new Date(0)
返回1970-01-01-00:00:00,有没有类似的东西,但返回0/0/0?
谢谢!
我有一个对象有一些日期,我想将它们返回到getter中。问题是我需要做Date.toString();
因为我必须打印它们,当日期为空时,我得到一个NullPointerException
。Java,设置日期为0/0/0
我正在考虑在日期为空时返回日期0/0/0,但我不知道如何设置此值。有什么办法吗?就像new Date(0)
返回1970-01-01-00:00:00,有没有类似的东西,但返回0/0/0?
谢谢!
根据定义,没有日期0/0/0,因为没有第0天也没有第0个月。一天是集合{1,...,28或30或31}和月份的成员是集{1,... 12}的成员。因此,将0/0/0表示为Date对象是不可能的 - 而且它是不可能的。
这种简单的方法可以得到你所需要的,因为在评论中已经提到你的问题:
public String dateString(Date date) {
if (date != null)
return date.toString();
else
return "0/0/0";
}
或
String dateString;
try {
dateString = date.toString();
}
catch(NullPointerException e) {
dateString = "0/0/0";
}
更新:第二个选择是不鼓励的建议在评论中。
请不要使用第二种选择。 –
@ThiagoPorciúncula你能解释一下为什么吗?我很好奇,如果这是一个不好的做法,我不知道,我想改善。 – saljuama
@saljuama故意引发异常是一种不好的做法,因为不应抛出异常,应该避免它们。它们的主要用途是仅用于调试代码,而不用于发布版本。 – Lefteris008
Java使用没有0年的格里历日历。另外,您必须记住,现在也有零个月。将月份设置为'0'将导致获得1月份,因为月份基于0-索引。零日也不存在。 假设你得到并返回“现代”日期(AD),你可以在BC时代设置你的“下界”日期。所以,当你得到一个null日期,你可以返回一个BC日期来区分它与你的实际。下面的代码:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.ERA, GregorianCalendar.BC); //Set the BC era
cal.set(Calendar.YEAR, 1); //Set the year to 1 BC
cal.set(Calendar.MONTH, 0); //Set the month to January
cal.set(Calendar.DAY_OF_MONTH, 1); //Set the day to 1st
DateFormat df = new SimpleDateFormat("yyyy MMM d G"); //Format the date
String returnedDate = df.format(cal.getTime()); //Generate a String of it for other use
您可以在代码自定义您的需要,如果你也正在得到BC时代日期(也许通过设置一个更老的日期)。
编辑:你当然可以用什么其他的建议,即检查空和返回一个字符串"0/0/0"
但这可能以后会导致更多的问题,当你将尝试解析上述字符串。另外,由于根据定义0/0/0不是格里历中的有效日期(请参见说明),因此应避免使用此“通配符”字符串并设置实际日期,如上所述。
澄清:公历并不在Java中既不包含0年或0一个月0定义一天,而不是由执行(这意味着它是不是有意的限制,这是它的概念的一部分)。
@ user2642282是的,我看到它,我承认它。我说的是完全一样的东西。但除了我对格里高利日历的限制(您也注意到)的澄清之外,我正在为deusex12提供解决方案。 – Lefteris008
这是不是一个限制,公历中没有第0年。请参阅https://en.wikipedia.org/wiki/0_(年) –
好吧,使用“限制”这个词时,如果它的概念不包含零年,那么它就是其中的一部分。我们能否回到为他的问题提供可行的解决方案,而不是试图发挥我的话语?因为我可以看到,你迄今只发布了公历的定义。 – Lefteris008
在调用'toString()'之前,更容易测试日期是否为空。如果它是空的,你可以打印'0/0/0','null date',或者任何你喜欢的东西。 –
更好的方法是在使用它之前检查日期是否为空。 – astuter