2011-03-25 153 views
5

我试图打印Date,只是DateFormat.getDateTimeInstance()这样做的方式。格式化日期,允许为null

format抛出一个NullPointerException路过null的时候,所以我一直在想,如果有一个不同的方法,将返回null(或"null")呢?

东西我会打电话的,而不是

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

如何扩展'DateFormat'类 - 但这可能比您正在做的纯粹空检查更复杂。 – Nishan 2011-03-25 12:08:03

+0

d == null究竟出了什么问题? null:DateFormat.getDateTimeInstance()。format(d)) – Ingo 2011-03-25 12:10:24

回答

14

你可以只包一个实用方法中调用:

public class DateUtils { 
    public static String formatDateTime(Date dateOrNull) { 
     return (dateOrNull == null ? null : DateFormat.getDateTimeInstance().format(dateOrNull)); 
    } 
} 

私有的构造和javadoc不再赘述。

+0

谢谢,这正是我打算做的。只是想避免重新发明轮子...... – 2011-03-25 12:15:39

2

什么是与你的现有代码的问题?

null是一种特殊情况,你决定在这种情况下需要一个特定行为(返回"null")而不是另一个特定行为(抛出NPE)。通过在顶层切换而不是在格式化方法中嵌入这种逻辑来表达这一点可以说是更清晰。

这可能是有点清洁使用完整的if-else而不是三级运营商,虽然,以使其更清晰,有两个不同的分支(正常,特例,null):

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

空值情况下的返回值也应该在你的方法的javadoc中明确。

+0

我现有的代码没有真正的问题。问题是,我使用这几次来记录日期,如果我忘记了一次,那么我的应用程序可能会因为无法记录'null'而在一天之内崩溃。所以如果有一些标准的方式,我很乐意使用它。 – 2011-03-25 12:14:09

+0

“忘记一次”?我的印象是这已经是效用函数的一部分。如果没有,那就是你的解决方案,按照JB Nizet的回答:) – 2011-03-30 16:06:47