我们可以使用new DateFormat();
创建DateFormat
的对象吗?
DateFormat format = DateFormat.getDateInstance();
使用但是我们可以使用以下内容吗?
DateFormat df = new DateFormat();
df.getDateInstance();
答案 0 :(得分:4)
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);