【问题标题】:Best practice to format MMyyyy to MMyy将 MM yyyy 格式化为 MM yy 的最佳实践
【发布时间】:2015-01-26 03:49:45
【问题描述】:

早安,

以下是我的示例代码:

String month = "09";

String year = "2014";

String monthYear = "092014";

monthYear 的格式是MMyyyy,我想把它格式化成MMyy。因此,我这样做如下:

方法一:

final SimpleDateFormat oriMonthYear = new SimpleDateFormat( "MMyyyy" );
final SimpleDateFormat changeMonthYear = new SimpleDateFormat( "MMyy" );

String newMonthYear = changeMonthYear.format( oriMonthYear.parse( month + year) );

这给了我正确的输出,但我不确定我是否以愚蠢的方式这样做。我相信这应该是另一种最佳实践,并且是明智的做法。请多多指教。

【问题讨论】:

  • 如果这可行并且您正在寻找如何改进它,那么请将您的问题移至codereview.stackexchange.com
  • 您的日期是 2000 年之前还是 2099 年之后?你打算如何处理它们?
  • 这对我来说很好。请注意,SimpleDateFormat 不是线程安全的。 "建议为每个线程创建单独的格式实例。"

标签: java simpledateformat


【解决方案1】:

我们可以在 Java 8 或更高版本中使用YearMonth,如下所示

YearMonth
        .parse(yearMonth, DateTimeFormatter.ofPattern(MMYYYY))
        .format(DateTimeFormatter.ofPattern(MMYY));

【讨论】:

    【解决方案2】:

    SimpleDateFormat 类是格式化日期,你的输入是String,因此你的问题是格式化字符串而不是日期。

    我建议如下:

    private String formatDate(String month, String year) {
      return month + year.substring(2);
    }
    

    注意1:您应该验证上述方法中的输入,这只是为了让您快速了解我会做什么。

    注意2:你也可以查看String.format(),更多信息here

    【讨论】:

    • 我真的只推荐这个,只要你想要的只是减少两位数。一旦您想以任何其他方式调整该值,使用日期会更干净、更自然。
    【解决方案3】:

    如果 monthYear 的格式始终为 MMYYYY,您可以使用:

    String newMonthYear = monthYear.replaceAll("(?<=\\d{2})\\d{2}(?=\\d{2})", "");
    

    【讨论】:

    • 这是使用正则表达式没有任何意义的问题之一,并且会不必要地难以理解正在发生的事情。
    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多