java – 更改日期格式

如果输入为01-01-2015,则应更改为2015-01-01.
如果输入为2015-01-01,则应更改为01-01-2015.
我使用SimpleDateFormat但没有得到正确的输出
//Class to change date dd-MM-yyyy to yyyy-MM-dd and vice versa
public class ChangeDate {
  static SimpleDateFormat formatY = new SimpleDateFormat("yyyy-MM-dd");
  static SimpleDateFormat formatD = new SimpleDateFormat("dd-MM-yyyy");

  //This function change dd-MM-yyyy to yyyy-MM-dd
  public static String changeDtoY(String date) {
    try {
      return formatY.format(formatD.parse(date));
    }
    catch(Exception e) {
      return null;
    }
  }

  //This function change yyyy-MM-dd to dd-MM-yyyy
  public static String changeYtoD(String date) {
    try {
      return formatD.format(formatY.parse(date));
    }
    catch(Exception e) {
      return null;
    }
  }
}

我想要一些自动检测日期模式并更改为其他格式的条件.

解决方法

正则表达式是矫枉过正

对于日期时间的工作,不需要打扰regex.

只需尝试使用一种格式进行解析,捕获预期的异常.如果确实抛出了异常,请尝试使用其他格式进行解析.如果抛出异常,那么您知道输入意外地不是两种格式.

java.time

您正在使用现在由Java 8及更高版本内置的java.time框架取代的旧的麻烦的日期时间类.新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计.由JSR 310定义.由ThreeTen-Extra项目扩展.见Oracle Tutorial.

LOCALDATE的

新类包括一个LocalDate,仅适用于没有时间的日期值.正是你需要的.

格式化程序

您的第一种格式可能是标准的ISO 8601格式,YYYY-MM-DD.认情况下,此格式用于java.time.

如果由于输入与ISO 8601格式不匹配而导致第一次解析尝试失败,则抛出DateTimeParseException.

LocalDate localDate = null;  
try {
    localDate = LocalDate.parse( input );  // ISO 8601 formatter used implicitly.
} catch ( DateTimeParseException e ) {
    // Exception means the input is not in ISO 8601 format.
}

另一种格式必须由与您使用SimpleDateFormat类似的编码模式指定.因此,如果我们从第一次尝试中捕获异常,请进行第二次解析尝试.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM-dd-yyyy" );
LocalDate localDate = null;  
try {
    localDate = LocalDate.parse( input );
} catch ( DateTimeParseException e ) {
    // Exception means the input is not in ISO 8601 format.
    // Try the other expected format.
    try {
        localDate = LocalDate.parse( input,formatter );
    } catch ( DateTimeParseException e ) {
        // FIXME: Unexpected input fit neither of our expected patterns.
    }
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...