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

1.   Format类结构:

·        java.lang.Object

·        java.text.Format

·        All
Implemented Interfaces:

Serializable, Cloneable

Direct Known Subclasses:

DateFormat, MessageFormat, NumberFormat


public abstract class
Format

extends
Object

implements
Serializable,
Cloneable

2.Format类概述:

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

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

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

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类的抽象子类,
有一些static的getXxxxInstance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式。

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

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

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

java.util.Calendar也是日期操作相关的类,实现类为GregorianCalendar。主要对日期进行操作。注意add方法和roll方法的区别,roll方法不更改更大的字段。还有一些静态的变量DAY_OF_MONTH,DAY_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);

/**
输出格式: 2014年8月30日 星期六 */

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()
返回当前缺省语言环境的通用数值格式/*输出结果:868,326.815*/。

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

System.out.println(myString);

//getPercentInstance() 
返回当前缺省语言环境的百分比格式。/*输出结果:314%*/

myString = NumberFormat.getPercentInstance().format(test);

System.out.println(myString);

NumberFormat format = NumberFormat.getInstance();

//
设置数值的小数部分允许的最大位数。 /*输出结果:868,326.815 */

format.setMaximumFractionDigits( 3 );

System.out.println(format.format(num));

//
设置数值的整数部分允许的最大位数。 /*输出结果:26.815 */

format.setMaximumIntegerDigits(2);

System.out.println(format.format(num));

//
设置数值的小数部分允许的最小位数。 /*输出结果:26.815 */

format.setMinimumFractionDigits(2);

System.out.println(format.format(num));

//
设置数值的整数部分允许的最小位数。 /*输出结果:26.815 */

format.setMinimumIntegerDigits(2);

System.out.println(format.format(num));

6. MessageFormat类:

MessageFormat
提供了以与语言无关方式生成连接消息的方式。使用此方法构造向终端用户显示的消息。

MessageFormat
获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置。

注:MessageFormat
不同于其他Format
类,因为MessageFormat
对象是用其构造方法之一创建的(而不是使用getInstance
样式的工厂方法创建的)。工厂方法不是必需的,因为MessageFormat
本身不实现特定于语言环境的行为。特定于语言环境的行为是由所提供的模式和用于已插入参数的子格式来定义的。

时间: 2025-01-02 21:17:42

Format类及其子类功能和用法详解的相关文章

Android开发之DatePickerDialog与TimePickerDialog的功能和用法详解

DatePickerDialog与TimePickerDialog的功能比较简单,用法也很简单,只要下面两步即可. ?  通过new关键字创建DatePickerDialog.TimePickerDialog实例,调用它们的show()方法即可将日期选择对话框.时间选择对话框显示出来. ?  为DatePickerDialog.TimePickerDialog绑定监听器,这样可以保证用户通过DatePickerDialog.TimePickerDialog设置事件是触发监听器,从而通过监听器来获

Format类及其子类功能和使用方法具体解释

1.   Format类结构: ·        java.lang.Object ·        java.text.Format ·        All Implemented Interfaces: Serializable, Cloneable Direct Known Subclasses: DateFormat, MessageFormat, NumberFormat public abstract class Format extends Object implements S

XStream 用法详解 XML 转换为 java 实体类

XStream 用法详解 java 类与 XML 互换 现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现. 我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输.接口调用的朋友有所帮助. 首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包: 其次是预备一个 XML 事例 <config> <span styl

python format 用法详解

format 用法详解 不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 单个参数可以多次输出,参数顺序可以不相同 填充方式十分灵活,对齐方式十分强大 官方推荐用的方式,%方式将会在后面的版本被淘汰 format填充字符串 一 填充 1.通过位置来填充字符串 print('hello {0} i am {1}'.format('world','python')) # 输入结果:hello world i am python print('hello {} i am {}'.format

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上. 写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hover.:

java定时任务类Timer和TimerTask用法详解

原文:java定时任务类Timer和TimerTask用法详解 代码下载地址:http://www.zuidaima.com/share/1550463277550592.htm package com.zuidaima.util; import java.io.IOException; import java.util.Timer; import test.MyTask; /* * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务 * 退出任务,退出定时器.

JSON详解+ C# String.Format格式说明+ C# ListView用法详解 很完整

JSON详解 C# String.Format格式说明 C# ListView用法详解 很完整

linux curl用法详解

linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面的:下一篇再讲基于libcurl库的开发. curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,我们先来看看curl对多个URL的灵活操作,这些规则使我们的 批处理需求应用起来非常方便. 1.用{}表示多个URL    如 http://site.{one,two,t

1:CSS中一些@规则的用法小结 2: @media用法详解

第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule是一个声明,为CSS提供执行或怎么表现的指令.每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么.这是一个通用的语法,尽管每个at-rule有其它语法变体.常规规则 常规规则遵循下面的语法: 复制代码 代码如下: @[KEYWORD] (RULE); @charset