格式化日期 - 找不到符号

时间:2018-06-06 15:44:38

标签: java java-time

大家好,我有一个类,它接受带有日期/时间值的输入字符串。我必须采取不同格式的输入和转换。这是一个例子:

class Format{
    public String solution(String Dt) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        String fr = df.format(Dt);
        return fr;
    }
}

输入Dt如下所示:

March 16, 20018 7:56 AM

我从上面的代码中收到错误:

Format.java:13: error: cannot find symbol
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        ^
  symbol:   class DateFormat

如果有人知道如何格式化输入日期字符串,请告诉我。谢谢。

我试过这个,但仍然会抛出错误:

SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date date=localDateFormat.parse(Dt);

错误:

Format.java:10: error: unreported exception ParseException; must be caught or declared to be thrown
        Date date=localDateFormat.parse(Dt);

2 个答案:

答案 0 :(得分:3)

您应该使用DateTimeFormatter s。首先创建一个格式化程序来解析文本:

final DateTimeFormatter in = new DateTimeFormatterBuilder()
    .appendPattern("MMMM dd, yyyy K:mm a")
    .toFormatter(Locale.US);

MMMM是一个文字月份 dd是月份的日期 yyyy是年份 K是上午/下午(1或2位)的小时
mm是几分钟的时间 a是AM / PM

我需要美国Locale,因为我的默认Locale是英国,只有在小写的情况下才会解析AM / PM。美国Locale仅以大写形式解析它们(在您的示例中)。

然后您可以创建一个格式化程序来打印您喜欢的文本:

final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");

最终代码:

public String solution(String Dt) {
    final DateTimeFormatter in = new DateTimeFormatterBuilder()
        .appendPattern("MMMM dd, yyyy K:mm a")
        .toFormatter(Locale.US);
    final DateTimeFormatter out = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
    return out.format(in.parse(Dt));
}

您当前输出格式的一个缺陷是您无法区分AM和PM。您应该使用HH(0 - 23)而不是h(0 - 12)。

答案 1 :(得分:1)

这是一个编译错误,修复了丢失的导入。 parse(); throws一个ParseException(已检查的例外),必须明确处理:

try {
    Date date=localDateFormat.parse(Dt);
} catch (ParseException ex) {
    ex.printStackTrace(); //or log
}