格式化日期,允许为空

时间:2011-03-25 12:00:34

标签: java date

我正在尝试打印Date,就像DateFormat.getDateTimeInstance()一样。

传递format

NullPointerException会抛出null,所以我一直在想是否有一种不同的方法可以返回null(或"null" )而不是?

我要打电话的是

Date d = null;
System.out.println(d==null ? null : DateFormat.getDateTimeInstance().format(d));

2 个答案:

答案 0 :(得分:16)

您可以将调用包装在实用程序方法中:

public class DateUtils {
    public static String formatDateTime(Date dateOrNull) {
        return (dateOrNull == null ? null : DateFormat.getDateTimeInstance().format(dateOrNull));
    }
}
为简洁起见,省略了私有构造函数和javadoc。

答案 1 :(得分:2)

现有代码有什么问题?

null是一种特殊情况,您已经决定在这种情况下需要一个特定的行为(返回"null")而不是另一个特定行为(抛出NPE)。通过在顶层切换而不是在格式化方法中隐藏这个逻辑,可以说是更清晰。

使用完整的if-else而不是第三个运算符可能会更清晰,但要更清楚地知道有两个不同的分支(正常的,特殊的null):

if (d == null) {
    return "null"; // or whatever special case
}
else {
    return DateFormat.getDateTimeInstance().format(d);
}

null方法中的返回值也应该在方法的javadocs中清楚显示。