日期格式未正确显示

时间:2018-01-22 17:36:46

标签: java

当我按照此13/01/201413-01-2014

传递文字时
String text = "JAN 13,2014 09:15";
String patternst = "\d\d\d\d-\d\d-\d\d*";
Pattern pattern = Pattern.compile(patternst);
Matcher matcher = pattern.matcher(text);
String data = "";
while (matcher.find()) {
    data = matcher.group(0);
}
try {
    int year = Integer.parseInt(data.split("-")[0]);
    int month = Integer.parseInt(data.split("-")[1]);
    int day = Integer.parseInt(data.split("-")[2]);
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, day);
    Date theDate1 = cal.getTime();
    SimpleDateFormat format1 = new ("dd/MM/yyyy");
    String temp = format1.format(theDate1);
    System.out.println("Hello, World! " + temp);
} catch (Exception e) {
    Date theDate1 = new Date(text);
    SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
    String temp = format1.format(theDate1);
    System.out.println("Hello, World! " + temp);
} 

然后我收到类似Exception in thread "main java.lang.IllegalArgumentException的错误,否则其他一些输出正在提交如何解决此问题我希望日期格式dd/MM/yyyy如果文字是23/01/2017或{ {1}}或13-01-201413-01-2015.0013-01-2014.567

1 个答案:

答案 0 :(得分:0)

首先,请避免使用标记为@Deprecated的类new Date(String s)的类和方法。

现在解析Date的正确方法是使用SimpleDateFormat,因此您需要创建一个正确的模式来解析日期。

在您的情况下,您的文字JAN 13,2014 09:15匹配模式为MMM dd,yyyy HH:mm

这是一个如何使用它的代码示例:

try {
    String pattern = "MMM dd,yyyy HH:mm";
    String text = "JAN 13,2014 13:15";

    SimpleDateFormat format = new SimpleDateFormat(pattern);
    Date date = format.parse(text);

    // Directly output the date
    System.out.println(date);

    // Output the date with another pattern
    String pattern2 = "dd/MM/yyyy HH:mm:ss";
    SimpleDateFormat format2 = new SimpleDateFormat(pattern2);
    System.out.println(format2.format(date));
} catch (ParseException e) {
    e.printStackTrace();
}

当您必须以多种不同的格式解析日期时,您可以使用不同的可能模式创建一个数组:

public static Date parse(String text) {
    SimpleDateFormat format = new SimpleDateFormat();
    // The detaild pattern must be before the vague
    String[] pattern = {
            "MMM dd,yyyy HH:mm",
            "MMM dd,yyyy",
            "dd/MM/yyyy HH:mm:ss",
            "dd/MM/yyyy",
            "dd-MM-yyyy HH:mm:ss",
            "dd-MM-yyyy",
        };

    for(String p : pattern) {
        try {
            format.applyPattern(p);
            return format.parse(text); 
        } catch (ParseException ignore) {
        }
    }

    return null; // or Throw an Exception
}

仅在需要处理用户输入时使用。 (另外我建议将用户输入限制为仅提供所需的格式。)