【问题标题】:Pattern String from a joda-time DateTimeFormatter?来自joda-time DateTimeFormatter的模式字符串?
【发布时间】:2012-05-08 00:28:15
【问题描述】:

是否可以从 joda-time DateTimeFormatter 中获取模式字符串?

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
String originalPattern = formatter. ???

【问题讨论】:

  • 我猜你想找回"yyyyMMdd"?在您的特定示例中,您可以只声明一个单独的 String 变量。有什么理由不充分吗?
  • @MattBall,几乎可以肯定,因为这只是说明问题的简化示例。这个问题本身就很清楚了。
  • 仅供参考,java.time 的类似问题:Get original pattern String given a JDK 8 DateTimeFormatter?。 java.time 类取代了 Joda-Time 项目。

标签: java jodatime


【解决方案1】:

Joda Time 不提供从 DateTimeFormatter 获取原始模式的方法。一个原因可能是 DateTimeFormatter 不一定是从模式创建的。例如DateTimeFormat.forStyle() 根本不使用模式。

但是,如果您总是使用模式,那么您可以包装 DateTimeFormat 类以在构造 DateTimeFormatter 时记录模式。这样,您以后可以使用简单的静态方法查找它。例如:

public class ReversableDateTimeFormat {

  private static final Map<DateTimeFormatter, String> patternHistory = new HashMap<DateTimeFormatter, String>();

  public static DateTimeFormatter forPattern(String pattern) {
    DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern);
    patternHistory.put(dateTimeFormatter, pattern);
    return dateTimeFormatter;
  }

  public static String getPattern(DateTimeFormatter dateTimeFormatter) {
    return patternHistory.get(dateTimeFormatter);
  }

}

那么你可以这样做:

DateTimeFormatter formatter = ReversableDateTimeFormat.forPattern("yyyyMMdd");
String originalPattern = ReverseableDateTimeFormat.getPattern(formatter);

【讨论】:

  • 优秀。有时,您只是在寻找一个古老的“那是不可能的”。对于适用的情况,这也是一个很好的解决方案。
  • 答案完全正确。但是,如果您想使用样式并了解模式,您可以使用DateTimeFormat.patternForStyle()。
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 2020-09-04
相关资源
最近更新 更多