【问题标题】:Trouble with formatting a string that contains a date in java在java中格式化包含日期的字符串时遇到问题
【发布时间】:2019-10-03 02:11:39
【问题描述】:

基本上我有一个包含日期的字符串,我试图让它打印出只有 1 位数字的月份和日期前面的 0。所以 1 会打印出 01。这是我编写的代码,但我收到一条错误消息:线程“main”java.util.IllegalFormatConversionException 中的异常:d!= java.lang.String。

day = String.format("%02d", day);

【问题讨论】:

    标签: java date-formatting date


    【解决方案1】:

    假设dayint

    然后用

    day = String.format("%02d", day);
    

    您正在尝试将字符串重新分配给 int

    试试

    String dayStr = String.format("%02d", day);
    

    编辑

    所以day 已经是String,那么format("%02d", day); 将不起作用d 意味着它是int

    所以先把它转换成int

    day = String.format("%02d", Integer.valueOf (day));
    

    【讨论】:

    • day 是一个字符串。它实际上是一个名为 date 的较大字符串的一部分,其中包含 dd/mm/yyyy 格式的日期
    【解决方案2】:

    如果允许我退后一步:这可能有点像设计问题。您不应该将日期存储在 dd/mm/yyyy 格式的字符串中。您应该将您的日期存储在LocalDate 中。当然,如果日期是字符串输入,例如来自用户,您需要接受 is as such。然后转换为LocalDate

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
        String dateString = "1/9/2019";
        LocalDate date = LocalDate.parse(dateString, dateFormatter);
    

    要将月份中的日期格式化为两位数,请使用另一个 DateTimeFormatter

        DateTimeFormatter dayOfMonthFormatter = DateTimeFormatter.ofPattern("dd");
        String dayString = date.format(dayOfMonthFormatter);
        System.out.println("Day in two digits is " + dayString);
    

    这种情况下的输出是:

    两位数的日期是01

    或者用两位数的日期和两位数的月份输出完整的日期:

        DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
        String outputString = date.format(outputDateFormatter);
        System.out.println("Output: " + outputString);
    

    输出:01/09/2019

    链接: Oracle tutorial: Date Time.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多