【问题标题】:Java SimpleDateFormat returning null, but only on second callJava SimpleDateFormat 返回 null,但仅在第二次调用时
【发布时间】:2023-03-21 14:09:02
【问题描述】:
public static void main(String[] args) {
    ParsePosition pp = new ParsePosition(0);
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
    String datetoparse = "7/1/2003 00:02:53";
    Date date = formatter.parse(datetoparse, pp);
    System.out.println(date.toString());
    date = formatter.parse(datetoparse, pp);
    System.out.println(date.toString());
}

格式调用在第一次调用时返回正确的值。但是为什么它在第二次调用时返回 null(我解析的字符串与第一次调用相同)?

【问题讨论】:

  • public Date parse(String text, ParsePosition pos) > 从字符串中解析的日期。如果出错,返回null。 Javadoc link

标签: java date calendar simpledateformat


【解决方案1】:

由于某种原因,您使用的是ParsePosition。第一个parse 调用将ParsePosition 更新为超过解析中使用的日期。第二个parse 调用没有什么可解析的。这是一个错误,and parse returns null

只需使用the inherited parse method without a ParsePosition

【讨论】:

  • 或者为了证明调用pp.setIndex(0) :)
  • 谢谢 rgettman,你是对的。我认为 parse() 需要 ParsePosition 参数,但只有 SimpleDateFormat 中重载的方法才需要。父类 DateFormat 中的 parse 方法不需要它,所以我简单地删除了参数,它现在可以工作了。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多