【问题标题】:applyPattern() in SimpleDateFormat gives NullPointerEcxeption with white space in javaSimpleDateFormat 中的 applyPattern() 在 java 中给出带有空格的 NullPointerEcxeption
【发布时间】:2011-10-05 13:19:50
【问题描述】:

我有这段代码将日期格式化为这种模式 dd-MM-yyyy:

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
    sdf.applyPattern("yyyy-MM-dd");
     Date date_out = null;
    try {
        date_out = sdf.parse(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 sdf.format(date_out);

但是,当我将分隔符从“-”更改为空格或斜杠“/”时,我在 format() 行上得到 NullPointerEcxeption。 SimpleDateFormat 是否接受空格或任何其他字符作为日期分隔符?

【问题讨论】:

  • 您检查以确保您没有得到堆栈跟踪吗?您所说的 NPE 可能是因为输入为空。
  • 如果您将分隔符从“-”更改为空格,您的日期将不再与该模式匹配。这给了你 null ,然后你尝试格式化一个 null 对象,这给了你一个 NPE。
  • 好的。无论如何要添加空格或斜杠作为分隔符?

标签: java


【解决方案1】:

问题可能是如果date 与模式不匹配,sdf.parse(date); 将为空。如果您更改 SimpleDateFormat 对象的模式但不更改您正在解析的日期的格式,则会引发 ParseException 并且date_out 将为空。当您尝试格式化空字符串时,sdf.format() 将抛出 NullPointerException。

根据您的评论,我认为一些示例需要更多解释 - 所以我正在适当地编辑我的答案......

SimpleDateFormat applyPattern 更改 SimpleDateFormat 对象的模式,它的行为方式与构造函数中的字符串相同,也就是说,它告诉 Formatter 期望/使用哪种模式进行输出。

对于我认为您想要的,您需要两个 SimpleDateFormatter,一个输入一个,一个输出一个。 例如。

SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
SimpleDateFormat sdfOutput = new SimpleDateFormat(yyyy MM dd");
Date date_out = null;
try {
        date_out = sdfInput.parse(date);
} catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}
String myOutputtedDate = sdfOutput.format(date_out);

话虽如此,我猜你可以将 applyPattern 放在解析之后,输出之前......

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
String reformattedDate = "";
Date date_out = null;
try {
        date_out = sdf.parse(date);
} catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}
sdf.applyPattern("yyyy MM dd");
if (date_out != null)
{
    reformattedDate = sdf.format(date_out);
}

希望这会有所帮助。

【讨论】:

  • 日期匹配此模式:“yyyy-MM-dd'T'HH:mm:ss.S”。我虽然 applyPattern 的全部意义在于应用你自己的模式,
  • 工作得很好。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2018-07-11
相关资源
最近更新 更多