来自joda-time DateTimeFormatter的模式字符串?

Syn*_*sso 16 java jodatime

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

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
String originalPattern = formatter. ???
Run Code Online (Sandbox Code Playgroud)

gut*_*tch 21

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);
  }

}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

DateTimeFormatter formatter = ReversableDateTimeFormat.forPattern("yyyyMMdd");
String originalPattern = ReverseableDateTimeFormat.getPattern(formatter);
Run Code Online (Sandbox Code Playgroud)

  • 优秀.有时,你只是在寻找一个好的旧"那是不可能的".对于适用的情况,也是一个很好的解决方案. (3认同)
  • 答案是完全正确的.但是,如果你想使用样式并知道模式,你可以使用`DateTimeFormat.patternForStyle()`. (2认同)