【问题标题】:Last digit of year with DateTimeFormatterDateTimeFormatter 年份的最后一位数字
【发布时间】:2015-10-20 13:31:58
【问题描述】:

对于年份 2014 我想显示 4 和对于 2029 -> 9

我知道如何格式化 4 位数字 => yyyy 和两位数字 => yy

但我不明白,如何用最后一位数来做

DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020

【问题讨论】:

  • 那么 2015 年和 2025 年会有什么区别?
  • @Tunaki 我明白你的意思,但这对我来说并不重要
  • 用两位数字格式化并删除第一个字符。
  • @Tunaki 相差10年!如果需要保留 10 年的数据,那么他们首先不会选择这种日期格式

标签: java date java-8 java-time


【解决方案1】:
String sb = new SimpleDateFormat("yyMMdd").format(new Date());
        System.out.println(sb); // prints 151020
        sb = sb.substring(1, sb.length()); //remove 1st char
        System.out.println(sb); //prints 51020

【讨论】:

    【解决方案2】:

    您可以通过构建您自己的DateTimeFormatter 来做到这一点(而不是依赖于计算如果您的模式演变可能会失败的子字符串),如下所示:

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                            .appendValueReduced(ChronoField.YEAR, 1, 1, 0)
                                            .appendPattern("MMdd")
                                            .toFormatter();
    System.out.println(LocalDate.now().format(formatter)); // prints 51020
    System.out.println(LocalDate.of(2029, 1, 1).format(formatter)); // prints 90101
    

    但是,此格式化程序只能用于格式化LocalDate,不能用于解析LocalDate

    appendValueReduced 用于格式化时间字段的缩减值。在这种情况下,我们附加一个固定宽度 1 的值,并表示基值为 0(这样,有效值将介于 0 和 9 之间)。

    【讨论】:

    • 这将很好地解析。最后一个参数(基值)是基年,因此将其设置为 2010(而不是 0)将解析从 2000 年到 2009 年的日期。只要基年以零结尾,格式化日期就可以了。
    • 你能解释一下什么是基本价值吗?看不懂:(
    • @VextoR 我引用的 Javadoc 说得比我好:“例如,基值 1980 和宽度 2 将具有从 1980 到 2079 的有效值。在解析期间,文本“12”将产生值 2012,因为这是最后两个字符为“12”的范围内的值。“
    【解决方案3】:

    DateTimeFormatter 不太可能支持这种不寻常的要求。如果您将年份作为整数类型,则使用

    year % 10

    提取最右边的数字。

    【讨论】:

    • 其实是可以的,看我的回答。
    【解决方案4】:

    这对于 DateTimeFormatter 是不可能的。检查此链接:

    https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

    "y" 格式化程序应该将年份从 0 抛出到 99

    您只需自己提取最后一位数字并创建字符串。

    【讨论】:

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