Java最佳方式/推荐数据结构,表示一个月中的日期,例如1月1日

Nes*_*aev 2 java date

通常有代表一个月的任务,例如,

一月

,或一个月中的日期,例如,

1月1日

,以通用的方式,没有指定年份.

需要注意的是:捕获的数据(例如,用户选择或其他类型的输入)通常需要存储在DB-SLQ或NoSQ中.然后将其用于报告,例如,使用日期范围聚合.

关于哪种Java数据类型最适合上述场景,是否有任何共识/建议?

我看到以下3个选项:

  1. 在"0th"年(例如,1970年1月1日)内使用Java Date,然后使用Date操作仅提取所需字段(DAY,MONTH),并去除所有其余字段.像Joda或Java8这样的库在这里很方便.虽然程序开销可能非常高,但保存到DB在这里很简单.
  2. 使用人为的数据类型(例如ENUM)列出所有月份,或者使用一个月的数值并提供映射,然后进一步解析和敲击以捕获一个月中的一天.映射到DB字段并不困难.
  3. 使用String,例如"01 January".看起来很简单.

第2和第3版的编程密集程度可能较低,但另一个缺点是,在报告中使用此类日期可能很笨拙,因为按时间段汇总并不简单.

有关上述的任何建议/想法?

编辑:

看起来选项#1是最好的(最灵活,阻力最小,最容易持久化,最适合后续报告).新的Java库使数据操作和字段提取变得相对轻松.

Kay*_*man 6

java.time.MonthDay提供了一个现成的类,所以你不需要创建自己的.它也可用于其他java.time功能,所以这可能是你最好的选择.坚持也应该相当容易.

MonthDay birthday = MonthDay.of(Month.JANUARY, 11);
Run Code Online (Sandbox Code Playgroud)