【问题标题】:String Append in Java from Date without "-" to date with "-"Java中的字符串从没有“-”的日期到带有“-”的日期
【发布时间】:2018-05-26 10:37:03
【问题描述】:

我有一个字符串“20180101”,需要在“2018”和“01”和“01”之后附加“-”,所以它看起来像“2018-01-01”。 Java中有什么标准方法可以做到吗?

【问题讨论】:

    标签: java date date-formatting


    【解决方案1】:
    LocalDate.parse(
        "20180101", 
        DateTimeFormatter.BASIC_ISO_DATE
    )
    .toString()
    

    2018-01-01

    详情

    那个字符串看起来像一个日期。我建议你把它解析成LocalDate

    您的输入字符串格式uuuuMMdd 是标准ISO 8601 的“基本”变体。java.time 类已为该格式模式预定义了一个对象DateTimeFormatter.BASIC_ISO_DATE

    默认情况下,该类会以您想要的格式(标准ISO 8601 格式)生成String

    LocalDate localDate = LocalDate.parse("20180101", DateTimeFormatter.BASIC_ISO_DATE);
    String output = localDate.toString();  // the default format is the format you want.
    

    2018-01-01

    上面的方法在性能上有点贵,所以这里有一个简单的方法StringBuilder

    StringBuilder sb = new StringBuilder("20180101");
    sb.insert(6, "-");
    sb.insert(4, "-");
    System.out.println(sb);
    

    【讨论】:

    • 我不想转换成日期。我想转成字符串
    • 您可能应该添加注释,即解析日期格式在性能方面的成本很高。
    • 不要担心性能。或者,如果您是,至少进行测试以确定(1)性能是否是一个问题(2)在您的代码中花费时间的地方,然后再着手将您的代码更改为更脆弱和更不可读。此外,除了小型一次性程序之外,您应该正确地进行数据建模。这包括对日期使用日期类。
    • @OleV.V.已编辑。
    【解决方案2】:

    因为结果是一个字符串,我只能建议使用replaceAll,例如使用正则表达式:

    String date = "20180101";
    date = date.replaceAll("(....)(..)(..)", "$1-$2-$3");
    

    或者

    date = date.replaceAll("(\\d{4})(\\d{2})(\\d{2})", "$1-$2-$3");
    

    【讨论】:

    • @kumesana 这是正确的你也可以使用这个date = String.format("%s-%s-%s", date.substring(0, 4), date.substring(4, 6), date.substring(6, 8));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多