程序员人生 网站导航

Format类及其子类功能和用法详解

栏目:互联网时间:2014-09-05 16:14:33

Format类及其子类功能和用法详解

1.   Format类结构:

        java.lang.Object

        java.text.Format

        All Implemented Interfaces:

SerializableCloneable

Direct Known Subclasses:

DateFormatMessageFormatNumberFormat


public abstract class Format

extends Object

implements Serializable, Cloneable

 

2.Format类概述:

Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类 Format 定义了编程接口,用于将语言环境敏感的对象格式化为String(使用 format 方法)和将 String 重新解析为对象(使用 parseObject 方法)。

通常,一个 format parseObject方法必须能解析任何由其 format 方法格式化的字符串。不过,也可能存在不能解析的异常情况。例如,format 方法可能创建中间无分隔符的两个相邻整数,在这种情况下,parseObject 无法判断哪个数字属于哪个数。

Java 平台为格式化日期、消息和数字分别提供了三个特殊的Format 的子类:DateFormatMessageFormat NumberFormat

具体的子类必须实现三个方法:

format(Object obj, StringBuffertoAppendTo, FieldPosition pos)

formatToCharacterIterator(Object obj)

parseObject(String source,ParsePosition pos)

这些常规方法允许对对象进行多态解析和格式化,还可以被使用(如被 MessageFormat 使用)。子类通常也为特定的输入类型提供了另外的 format 方法,也为特定的结果类型提供了parse 方法。当在输入文本的开始没有任何所需格式的文本时,则任何不带 ParsePosition 参数的 parse 方法都应该抛出 ParseException

大多数子类还将实现以下工厂方法:

getInstance 获取一个适合于当前语言环境的有用的格式对象

getInstance(Locale)获取一个适合于指定语言环境的有用的格式对象。

此外,某些子类还可能为了更特殊的控制实现其它 getXxxxInstance 方法。例如,NumberFormat 类提供了 getPercentInstance getCurrencyInstance 方法来获取特殊的数字格式器。

Format 的子类如果允许程序员能为不同语言环境(比如用 getInstance(Locale) )创建对象,必须实现以下类方法:

 public staticLocale[] getAvailableLocales()

 最后子类定义一个常量集合来标识格式输出中的不同字段。这些常量用于创建一个 FieldPosition 对象,该对象标识字段中所包含的信息及其在格式化结果中的位置。这些常量应当命名为item _FIELD,其中item 标识了该字段。有关这些常量的例子,请参阅 ERA_FIELD 及其在 DateFormat 中的同类。

 

3.创建Format类的实例

         因为Format是抽象类,所以我们无法通过Format 的构造方法(非公有的)来实例化Format类的对象。如下面的写法是错误的:

Format format=new Format();

那么我们如何实例化Format类的实例呢?

我们可以利用Java面向对象语言的多态性来解决这个问题:

通过父类型的引用可以指向子类型的对象,说白了就是用子类去实例化父类的对象。如下面的做法:

Format format;

//通过子类直接实例化Format类的对象(适用于子类不是抽象类的情况)

format=new MessageFormat("hh");

//通过子类的getXxxxInstance()来实例化Format类的对象(适用于子类是抽象类的情况)

format=NumberFormat.getCurrencyInstance();

format=DateFormat.getDateInstance();

 

4. DateFormat

DateFormat Format类的抽象子类, 有一些staticgetXxxxInstance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式。

DateFormat不太常用。一般会使用SimpleDateFormat子类,newSimpleDateFormat("yyyy-MM-dd")newSimpleDateFormat("yyyy-MM-dd HH:mm:ss")等,来获得常用的时间格式。

可以通过设置的getXxxxInstance()方法来实例化DateFormat类的对象。

DateFormat类中还有一些static的字段,如WEEK_OF_MONTH_FIELD,WEEK_OF_YEAR_FIELDapi上说在FieldPosition中使用,用于对齐。

java.util.Calendar也是日期操作相关的类,实现类为GregorianCalendar。主要对日期进行操作。注意add方法和roll方法的区别,roll方法不更改更大的字段。还有一些静态的变量DAY_OF_MONTHDAY_OF_WEEK等,在get/set/add/roll方法中使用。

4.1DateFormat的用法举例:

Date d = new Date();

String s;

/** Date类的格式: Sat Aug 30 13:05:56 CST 2014 */

System.out.println(d);

System.out.println("******************************************");

 

/** 输出格式: 2014-8-30 */

s = DateFormat.getDateInstance().format(d);

System.out.println(s);

 

/** 输出格式: 2014-8-30 */

s = DateFormat.getDateInstance(DateFormat.DEFAULT).format(d);

System.out.println(s);

 

/** 输出格式: 2014830日 星期六 */

s = DateFormat.getDateInstance(DateFormat.FULL).format(d);

System.out.println(s);

 

/** 输出格式: 2014-8-30 */

s = DateFormat.getDateInstance(DateFormat.MEDIUM).format(d);

System.out.println(s);

 

/** 输出格式: 14-8-30 */

s = DateFormat.getDateInstance(DateFormat.SHORT).format(d);

System.out.println(s);

 

/** 输出格式: 2014-08-30 01:02:02 */

DateFormat format1 = new SimpleDateFormat(

        "yyyy-MM-dd hh:mm:ss");

s = format1.format(new Date());

System.out.println(s);  

5. NumberFormat类:

NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。

NumberFormat 可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

 

5.1NumberFormat的用法举例:

double num=868326.81472676;

 double test=3.1415926;

 //返回当前缺省语言环境的缺省数值格式。/*输出结果:868,326.815*/

 String myString = NumberFormat.getInstance().format(num);

 System.out.println(myString);

 //getCurrencyInstance()返回当前缺省语言环境的通用货币格式/*输出结果:¥868,326.81*/

 myString = NumberFormat.getCurrencyInstance().format(num);

 System.out.println(myString);

 //getNumberInstance()

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐

1.cyou 非常适合 Z 世代企业家的三大理由 2阿里、京东类ChatGPT产品正在内测 未来或将融入产品 3公会积极复工复产,2023直播行业有哪些新机遇? 4第三届OpenHarmony技术大会展区亮点纷呈,全方位洞见智慧互联未来 5第三届OpenHarmony技术大会应用生态实践分论坛成功举办 6第三届OpenHarmony技术大会OS安全分论坛圆满举办 7第三届 OpenHarmony 技术大会:创新成果丰硕,共筑开源生态新未来