代码之家  ›  专栏  ›  技术社区  ›  espresso_coffee

格式化日期-找不到符号

  •  0
  • espresso_coffee  · 技术社区  · 6 年前

    大家好,我有一个带日期/时间值的输入字符串的类。我必须接受输入并转换成不同的格式。以下是示例:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Michael    6 年前

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

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

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

    美国 Locale 因为我的违约 现场 是英国,它只在AM/PM是小写时才解析。美国 现场 仅以大写形式解析它们(在您的示例中)。

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

    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)。

        2
  •  1
  •   user2208931    6 年前

    这是一个编译错误,请修复丢失的导入。 这个 parse(); throws ParseException (选中异常),必须明确处理:

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