Java日期格式化DateFormat

时间:2015-10-30 16:13:13

标签: java

我们可以使用new DateFormat();创建DateFormat的对象吗?

DateFormat format = DateFormat.getDateInstance();
使用

但是我们可以使用以下内容吗?

DateFormat df = new DateFormat(); 
df.getDateInstance();

5 个答案:

答案 0 :(得分:4)

使用SimpleDateFormat

DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm.ss");

答案 1 :(得分:4)

DateFormat是一个抽象类,就像您无法实例化它们的所有抽象类一样。您只能实例化抽象类的子类,前提是子类也不是抽象类。要了解有关抽象类的更多信息,请查看abstract classes tutorial by oracle

答案 2 :(得分:0)

DateFormat是一个带有受保护构造函数的抽象类。您可以像这样使用SimpleDateFormat。 这句话甚至不会编译。

  DateFormat d=new DateFormat();

答案 3 :(得分:0)

构造函数定义为

protected DateFormat()

这意味着你不能这样称呼它。你也不能做类似的事情:

DateFormat df = DateFormat;

它不提供任何别名机制以避免键入它。所以你必须始终这样做:

DateFormat df = DateFormat.getDateInstance();

或者您可以使用@Verhagen指出的子类。

它也是一个抽象类,但你能做到的一种方法是使用匿名构造函数:

    java.text.DateFormat df = new java.text.DateFormat(){
        @Override
        public Date parse(String source, ParsePosition pos) {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public StringBuffer format(Date date, StringBuffer toAppendTo,
                FieldPosition fieldPosition) {
            // TODO Auto-generated method stub
            return null;
        }
    };

但在这种情况下,您必须定义这些方法的作用。

答案 4 :(得分:0)

你可以使用SimpleDateFormat,这是一个实现,而不是@Verhagen回答中所述的抽象类,但是对它来说很简单,大多数时候你必须在ThreadLocal中使用它来避免这些问题。

在多线程环境中使用时,它有一些非常糟糕的副作用。

使用Java 8推荐使用新的Date API

final DateTimeFormatter formatter =  
      DateTimeFormatter.ofPattern(dateTimeFormatPattern);  
   final String nowString = formatter.format(now8);