java - 使用 SimpleDateFormat,Java 的日期解析不正确

标签 java simpledateformat parse-error

我需要使用日期模式“yyyy-MM-dd”从输入字符串中解析日期,如果日期将以任何其他格式出现,则抛出错误。

这是我解析日期的一段代码:

private void validateDate() throws MyException {
  Date parsedDate;
  String DATE_FORMAT = "yyyy-MM-dd";
  try{
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
    System.out.println(parsedDate);
  } catch (ParseException e) {
    throw new MyException(“Error occurred while processing date:” + getMyDate());
  }

}

当我在 myDate 中输入类似“2011-06-12”的字符串时,我将得到输出“Thu Sep 29 00:00:00 EEST 2011”,这很好。

当我发送不正确的字符串(如“2011-0612”)时,我收到了预期的错误。

当我试图传递一个仍然有两个“连字符”但数字位数错误的字符串时,问题就出现了。 示例:

输入字符串“2011-06-1211” 结果“2014 年 9 月 23 日星期二 00:00:00 EEST”。

输入字符串“2011-1106-12” 结果“2 月 12 日星期一 00:00:00 EET 2103”。

我无法更改字符串日期的输入格式。

如何避免?

最佳答案

您是否尝试过在您的 SimpleDateFormat 上调用 setLenient(false)

import java.util.*;
import java.text.*;

public class Test {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        Date date = format.parse("2011-06-1211"); // Throws...
        System.out.println(date);
    }
}

请注意,我还建议您设置 SimpleDateFormat 的时区和区域设置。 (或者,使用 Joda Time 代替...)

关于java - 使用 SimpleDateFormat,Java 的日期解析不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606126/

相关文章:

java - 程序未从预期目录运行?

Java:SimpleDateFormat 类中的问题

azure - 是否可以在Azure Synapse数据仓库中创建时态表

java - 通过枚举类型初始化参数

java - 使用 Java 代码访问 .NET dll 的方法

java - java中的日期类错误

java - android:如何将字符串转换为日期

PHP - 解析错误 : syntax error, 意外 '[' - 关联数组

haskell - 在 case 语句中解析错误

java - 如何在一个 Maven 命令中调用两个不同的配置文件?