【问题标题】:is there any date format for half year ad quarter year半年和季度有日期格式吗
【发布时间】:2018-05-29 11:38:13
【问题描述】:

SimpleDateFormat 是否有任何格式模式可以用于季度和半年?

    2007-01-23 expected output `Q1 2007`  
    2007-01-23 expected output `H1 2007`  

【问题讨论】:

  • SimpleDateFormat API 会比我们更快地为您解答这个问题。您通过此资源搜索的结果是什么?如果需要,请考虑创建自己的类来扩展 SimpleDateFormat 或 DateFormat。
  • 如果你用谷歌搜索“java 格式日期季度”,你可以找到很多例子......
  • 好的,如果是这种情况,我可以修改 JSTL 中的 formatDate 标记以适应我的要求吗?

标签: java simpledateformat


【解决方案1】:

不,据我所知,没有这样的事情。老实说,我不会让不同的公司对“Q1”和“H1”有不同的想法,比如“Q1 在最后一周结束,从 3 月开始”。

您必须编写自己的代码才能做到这一点。

编辑:查看 Java 8 java.time.DateTimeFormatter 文档,它看起来支持四分之一而不是一半。

【讨论】:

    【解决方案2】:

    正如@Jon Skeet 所说,Java8 添加了一个名为DateTimeFormatter 的新类。通过使用此类,您可以像这样格式化您的日期:

    DateTimeFormatter QUARTER_FORMAT = DateTimeFormatter.ofPattern("'Q'q yyyy");
    DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(DATE_FORMAT.parse("2007-01-23").toInstant().atZone(ZoneId.systemDefault()).format(QUARTER_FORMAT));
    

    但是如果你想使用这个类来格式化Timestamp it will throw UnsupportedOperationException.

    这适合Timestamp。

    DateTimeFormatter QUARTER_FORMAT = DateTimeFormatter.ofPattern("'Q'q yyyy");
    System.out.println(new Date((DATE_FORMAT_JA.parse("2018/01/01 13:01:01:011")).getTime()).toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(QUARTER_FORMAT));
    

    DateTimeFormatter不支持半年。

    【讨论】:

    • 请解释你做了什么,而不仅仅是放弃你的代码。请记住,OP 也询问了大约半年。
    • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2015-09-13
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多