【问题标题】:Mask formatter that accepts different types of date formats接受不同类型日期格式的掩码格式化程序
【发布时间】:2016-09-30 18:14:55
【问题描述】:

我必须以 MM/dd/yyyy 格式显示日期。要显示的日期可以是以下任何一种格式

  1. MM/dd/yyyy
  2. MM/yyyy
  3. yyyy

如果只有月份和年份可用,而日期不可用,那么我必须以 MM/__/yyyy 格式显示日期,将日期留空。

如果只有年份可用,而日期和月份不可用,那么我必须以 __/__/yyyy 格式显示日期,而将日期和月份留空。

如果整个日期可用,即使用掩码格式化程序的日、月和年,我可以正确显示它。 MaskFormatter formattedDate = new MaskFormatter("##'/##'/####"); 但如果缺少日期或月份,则无法显示。

有什么方法可以显示日期和月份为空白吗?

【问题讨论】:

  • 能否请您添加您尝试过的完整代码?
  • 你能创建一个最小、完整和可验证的例子吗?使用此链接stackoverflow.com/help/mcve

标签: java swing date swingx


【解决方案1】:

java.time

Java 8 及更高版本中内置的 java.time 类有一个类可以满足您的每个需求:

  • LocalDate 仅用于日期,没有时间,也没有时区。
  • YearMonth 表示年份和月份,但没有日期,也没有时区。
  • Year 仅一年。

例如:

YearMonth ym = YearMonth.now( ZoneId.of( "Africa/Tunis" ) );

ym.toString(): 2018-02

这三个都提供了一个format 方法,您可以向该方法传递一个DateTimeFormatter 对象。您可以在 DateTimeFormatter 中定义自定义格式模式。搜索 Stack Overflow,因为这已经被讨论过很多次了。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/__/uuuu" );
String output = ym.format( f );

02/__/2018

ISO 8601

顺便说一下,考虑使用标准的ISO 8601 格式将这些值显示为文本。日期格式为YYYY-MM-DD,年月格式为YYYY-MM


关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2014-09-23
    • 1970-01-01
    • 2019-06-27
    • 2021-04-18
    相关资源
    最近更新 更多