`

java.text.Format 格式化 总结

阅读更多
java.text.Format体系总结
http://jianzong2000.iteye.com/blog/406304
引用

1.1. Format的方法
java.text.Format做为一个抽象类,有二个抽象方法,
format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一个对象,并将得到的文本追加到给定的字符缓冲区。是将obj格式化为字符串,并加入到toAppendTo中。
parseObject(String source, ParsePosition pos): 分析字符串文本,生成一个对象。是format方法的逆向方法,将String转化为Object。
另外的format和parseObject这两个方法的重载。
方法formatToCharacterIterator(Object obj)并非抽象方法,api上要求子类必须实现这个方法。

1.2. Format的子类
Java 2 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat(抽象类)、MessageFormat 和 NumberFormat(抽象类)。
    ——>DateFormat   ——>SimpleDateFormat
Format  ——>MessageFormat
——>NumberFormat——>ChoiceFormat
——> DecimalFormat用于格式化十进制数字

1.3. DateFormat的用法
DateFormat 是日期/时间格式化子类的抽象类, 有一些static的get***Instance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式formatter。不太常用。
一般会使用SimpleDateFormat子类,new SimpleDateFormat("yyyy-MM-dd")或new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),来获得常用的时间格式。DateFormat 的get***Instance()方法一般也是获得SimpleDateFormat。
看DateFormat的源代码有个疑问,如果继承了DateFormat类,那DateFormat. get***Instance()的方法还是返回SimpleDateFormat? DateFormat.get是私有的,也不能覆盖。
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方法中使用。

1.4. MessageFormat的用法
和SimpleDateFormat一样,也需要传入一个pattern。如
String result = MessageFormat.format(
     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
     7, new Date(), “ a message ”);
其中
{1,time}中1是指第几个参数,time是指格式化的类型。根据api进行设置,是调用NumberFormat和DateFormat进行格式化的。
还可以调用parse方法将字符串转化为Obejct。

1.5. NumberFormat的用法
1.5.1. NumberFormat的介绍
NumberFormat 是所有数字格式的抽象基类。类结构与DateFormat类似。主要也是通过get***Instance方法获得实现类DecimalFormat。
比较常用的方法有:
setParseIntegerOnly:只影响分析。设为true,则忽略小数点以后的位置。
setDecimalSeparatorAlwaysShown:只影响格式化,且只影响小数点后没有数字的情况?设置分组符号是否显示。例如1,234中的,号是否显示。
setGroupingUsed:是否分组。如果此格式中使用了组,则返回 true。例如,在英国语言环境中,如果设置了组,则数 1234567 可能被格式化为 "1,234,567"。
还可以设置小数/整数部分的最大/小位数。
关于parse方法中的ParsePosition 和 format方法中的FieldPosition待研究。

1.5.2. 子类DecimalFormat
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。在DecimalFormat中传入pattern,可以自定义格式化类型。舍入方式是half-even(四舍五入)。
DecimalFormat 模式包含正数和负数子模式,例如 "#,##0.00;-#,##0.00"。;后面的代表负数模式。单独的 "0.00" 等效于 "0.00;-0.00"。如果存在显式的负数子模式,则它仅指定负数前缀和后缀;
0:代表是数字;如果不存在则显示为0;
#:代表是数字;
,:分组分隔符;没有则不分组

1.5.3. 子类ChoiceFormat
ChoiceFormat通常用于在 MessageFormat 中处理复数。创建 ChoiceFormat 时,可以指定一个 format 数组和一个 limit 数组。这些数组的长度必须相同。
如api中用于转换星期的例子
double[] limits = {1,2,3,4,5,6,7};
String[] monthNames = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
ChoiceFormat form = new ChoiceFormat(limits, monthNames);
ParsePosition status = new ParsePosition(0);
for (double i = 0.0; i <= 8.0; ++i) {
     status.setIndex(0);
     System.out.println(i + " -> " + form.format(i) + " -> "
                              + form.parse(form.format(i),status));
}
form.format(i)根据limits的数字转换为星期几的名称。limits中的数字必须按升序排列,如果提供的数字不在limits中,则选择使用第一个或最后一个索引。
form.parse(form.format(i),status),则根据Name转换为limits中的值。

1.5.4. ChoiceFormat的例子
下面是ChoiceFormat的api中一个较复杂的带模式格式的例子, 和MessageFormat一起使用:
//生成ChoiceFormat
double[] filelimits = {0,1,2};
String[] filepart = {"are no files","is one file","are {2} files"};//这里的2是指从testArgs中取第二个元素的值
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);

//定义Format数组testFormats,分别为ChoiceFormat,null, NumberFormat
//ChoiceFormat用于{0}, null用于{1}, NumberFormat用于{2}
Format[] testFormats = {fileform, null, NumberFormat.getInstance()};

//将MessageFormat的formats设为testFormats
//testFormats中的格式顺序对应于模式字符串中的格式元素的顺序
//最好使用setFormatsByArgumentIndex方法,而不是使用setFormats
MessageFormat pattform = new MessageFormat("There {0} on {1}");
pattform.setFormats(testFormats);

//进行fomat
Object[] testArgs = {null, "ADisk", null};
for (int i = 0; i < 4; ++i) {
     testArgs[0] = new Integer(i);
     testArgs[2] = testArgs[0];
//此时的testArgs值为{0, "ADisk",0}
//根据MessageFormat的定义,对testArgr元素进行处理
     System.out.println(pattform.format(testArgs));
}

1.5.5. ChoiceFormat的pattern构造方法
ChoiceFormat还有另外一个构造方法,传入pattern。
为 ChoiceFormat 对象指定一个模式是相当直接的。例如:
ChoiceFormat fmt = new ChoiceFormat(
      "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
其中数字#是按照大小顺序排列的, formate方法中传入参数x,如果x在0,1之间,则按照0处理。

1.5.6. 其它的数字格式化
另外在对数字进行格式化时,也可以考虑使用java.math.BigDecimal。
如setScale(int newScale,int roundingMode):newScale指精确度,即保留几位小数。roundingMode指舍入模式,常用的是四舍五入。DecimalFormat貌似只能使用四舍五入,如果使用别的舍入方式,就要使用BigDecimal了。
java.lang.Integer中的几个转换进制的方法也比较实用
toBinaryString(int i): 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
toHexString(int i): 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式
toOctalString(int i) :以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。


import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestFormat {
    
    public static void main(String[] args) {
    
       defaultNumberFormat();
       System.out.println();
    
       customNumberFormat();
       System.out.println();
    
       defaultDateFormat();
       System.out.println();
    
       customDateFormat();
       System.out.println();
    }
    
    public static void defaultNumberFormat() {
    
       int i = 123456;
    
       double x = 882323.23523;
    
       double p = 0.528;
    
       double c = 52.83;
    
       NumberFormat nf = NumberFormat.getInstance();
       System.out.println("NumberFormat.getInstance()");
       System.out.println("Integer " + i + " is displayed as " + nf.format(i));
       System.out.println("Double " + x + " is displayed as " + nf.format(x));
    
       NumberFormat nfInt = NumberFormat.getIntegerInstance();
       System.out.println("NumberFormat.getIntegerInstance()");
       System.out.println("Integer " + i + " is displayed as "
         + nfInt.format(i));
      
       NumberFormat nfNumber = NumberFormat.getNumberInstance();
       System.out.println("NumberFormat.getNumberInstance()");
       System.out.println("Double " + x + " is displayed as "
         + nfNumber.format(x));
    
       NumberFormat nfPercent = NumberFormat.getPercentInstance();
       System.out.println("NumberFormat.getPercentInstance()");
       System.out.println("Percent " + p + " is displayed as "
         + nfPercent.format(p));
    
       NumberFormat nfCurrency = NumberFormat.getCurrencyInstance();
       System.out.println("NumberFormat.getCurrencyInstance()");
       System.out.println("Currency " + c + " is displayed as "
         + nfCurrency.format(c));
    
       // 这里没有涉及相应的parse方法
    
    }
    
    public static void customNumberFormat() {
    
       double x = 1000.0 / 3;
    
       System.out.println("default output is " + x);//333.3333333333333
       patternPrint("###,###.##", x);//333.33
       patternPrint("####.##", x);//333.33
       patternPrint("####.00", x);//333.33
       patternPrint("####.0#", x);//333.33
       patternPrint("00000.##", x);//00333.33
       patternPrint("$###,###.##", x);//$333.33
       patternPrint("0.###E0", x);//3.333E2
       patternPrint("00.##%", x);//33333.33%
       double y = 23.0012;
       System.out.println("default output is " + y);//23.0012
       patternPrint("###,###.##", y);//23
       patternPrint("####.##", y);//23
       patternPrint("####.00", y);//23.00
       patternPrint("####.0#", y);//23.0
       patternPrint("00000.##", y);//00023
       patternPrint("$###,###.##", y);//$23
       patternPrint("0.###E0", y);//2.3E1
       patternPrint("00.##%", y);//2300.12%
    
    }
    
    public static void patternPrint(String pattern, double x) {
    
       DecimalFormat df = new DecimalFormat(pattern);
       System.out.println("output for pattern " + pattern + " is "
         + df.format(x));
    
    }
    
    public static void defaultDateFormat() {
    
       Date date = new Date();
       System.out.println("simple date " + date.toLocaleString());//2007-8-31 14:40:24
    
       DateFormat df = DateFormat.getDateTimeInstance();
       System.out.println(df.format(date));//2007-8-31 14:40:24
    
       DateFormat dfLong = DateFormat.getDateTimeInstance(DateFormat.LONG,
         DateFormat.LONG);
       System.out.println(dfLong.format(date));//2007年8月31日 下午02时40分24秒
    
       DateFormat dfMedium = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
       DateFormat.MEDIUM);
       System.out.println(dfMedium.format(date));//2007-8-31 14:40:24
       DateFormat dfShort = DateFormat.getDateTimeInstance(DateFormat.SHORT,
         DateFormat.SHORT);
       System.out.println(dfShort.format(date));//07-8-31 下午2:40
    
    }
    
    public static void customDateFormat() {
    
       Date date = new Date();
       patternPrint("yyyy.MM.dd HH:mm:ss z", date); // 两个MM, dd会导致补零//2007.08.31 14:40:24 CST
       patternPrint("yy年M月d日 HH时mm分", date); // 两个yy就显示为两位年份//07年8月31日 14时40分
       patternPrint("EEE, MMM d, ''yy", date);//星期五, 八月 31, '07
       patternPrint("h:mm a", date);//2:40 下午
       patternPrint("hh 'o''clock' a, zzzz", date);//02 o'clock 下午, 中国标准时间
       patternPrint("yyyyy.MMMMM.dd GGG hh:mm aaa", date);//02007.八月.31 公元 02:40 下午
       patternPrint("EEE, d MMM yyyy HH:mm:ss Z", date);//星期五, 31 八月 2007 14:40:24 +0800
       patternPrint("yyMMddHHmmssZ", date);//070831144024+0800
    
    }
    
    public static void patternPrint(String pattern, Date date) {
    
       SimpleDateFormat df = new SimpleDateFormat(pattern);
       System.out.println(df.format(date));
    }

}
输出:
引用

NumberFormat.getInstance()
Integer 123456 is displayed as 123,456
Double 882323.23523 is displayed as 882,323.235
NumberFormat.getIntegerInstance()
Integer 123456 is displayed as 123,456
NumberFormat.getNumberInstance()
Double 882323.23523 is displayed as 882,323.235
NumberFormat.getPercentInstance()
Percent 0.528 is displayed as 53%
NumberFormat.getCurrencyInstance()
Currency 52.83 is displayed as ¥52.83

default output is 333.3333333333333
output for pattern ###,###.## is 333.33
output for pattern ####.## is 333.33
output for pattern ####.00 is 333.33
output for pattern ####.0# is 333.33
output for pattern 00000.## is 00333.33
output for pattern $###,###.## is $333.33
output for pattern 0.###E0 is 3.333E2
output for pattern 00.##% is 33333.33%
default output is 23.0012
output for pattern ###,###.## is 23
output for pattern ####.## is 23
output for pattern ####.00 is 23.00
output for pattern ####.0# is 23.0
output for pattern 00000.## is 00023
output for pattern $###,###.## is $23
output for pattern 0.###E0 is 2.3E1
output for pattern 00.##% is 2300.12%

simple date 2010-3-19 20:48:09
2010-3-19 20:48:09
2010年3月19日 下午08时48分09秒
2010-3-19 20:48:09
10-3-19 下午8:48

2010.03.19 20:48:09 CST
10年3月19日 20时48分
星期五, 三月 19, '10
8:48 下午
08 o'clock 下午, 中国标准时间
02010.三月.19 公元 08:48 下午
星期五, 19 三月 2010 20:48:09 +0800
100319204809+0800



格式化时间日期
http://www.blogjava.net/youling/archive/2008/11/05/238759.html
引用

/**
* 格式化时间类
* DateFormat.FULL = 0
* DateFormat.DEFAULT = 2
* DateFormat.LONG = 1
* DateFormat.MEDIUM = 2
* DateFormat.SHORT = 3
* @author    Michael
* @version   1.0, 2007/03/09
*/

public class Test{
    public static void main(String []args){
        Date d = new Date();
        String s;
         
        /** Date类的格式: Sat Apr 16 13:17:29 CST 2006 */
        System.out.println(d);
         
        System.out.println("******************************************");  
       
        /** getDateInstance() */
        /** 输出格式: 2006-4-16 */
        s = DateFormat.getDateInstance().format(d);
        System.out.println(s);
       
        /** 输出格式: 2006-4-16 */
        s = DateFormat.getDateInstance(DateFormat.DEFAULT).format(d);
        System.out.println(s);
       
        /** 输出格式: 2006年4月16日 星期六 */
        s = DateFormat.getDateInstance(DateFormat.FULL).format(d);
        System.out.println(s);
       
        /** 输出格式: 2006-4-16 */
        s = DateFormat.getDateInstance(DateFormat.MEDIUM).format(d);
        System.out.println(s);
       
        /** 输出格式: 06-4-16 */
        s = DateFormat.getDateInstance(DateFormat.SHORT).format(d);
        System.out.println(s);
       
        /** 输出格式: 2006-01-01 00:00:00 */
        java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        s = format1.format(new Date());
        System.out.println(s);
       
        /** 输出格式: 2006-01-01 00:00:00 */
        System.out.println((new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(new Date()));
       
        /** 输出格式: 20060101000000***/
        java.text.DateFormat format2 = new java.text.SimpleDateFormat("yyyyMMddhhmmss");
        s = format2.format(new Date());
        System.out.println(s);
    }
}  


http://inter12.iteye.com/blog/585502
分享到:
评论

相关推荐

    java.lang.IllegalArgumentException Cannot format given Object as a Date

    这个错误通常发生在试图使用日期格式化类(如`java.text.SimpleDateFormat`)来处理非日期类型的数据时。 首先,我们需要理解`java.text.SimpleDateFormat`的作用。这个类是Java日期时间API的一部分,用于将日期和...

    java 核心API(java.text) 程序例子

    其中,`java.text`包是专门处理文本格式化、国际化和本地化的重要工具集,广泛用于日期、时间、数字、货币、数字格式化等方面。在这个包中,有许多关键的类和接口,例如`Format`、`NumberFormat`、`DateFormat`、`...

    java.text.DecimalFormat类十进制格式化

    Java.text.DecimalFormat类十进制格式化方法详解 ...Java.text.DecimalFormat类提供了灵活的十进制格式化方式,满足了大多数十进制格式化的需求,使用格式化模板和格式化规则可以实现各种复杂的十进制格式化操作。

    JAVA时间格式化处理[参考].pdf

    JAVA 时间格式化处理 JAVA 时间格式化处理是软件开发中一个非常重要的方面。...在 JAVA 中,我们可以使用 java.util.Date、java.util.Calendar、java.text.DateFormat 等类来实现日期和时间的处理和格式化。

    com.lowagie.text-2.1.7.jar下载

    1. **文本处理**:包括添加、编辑和格式化文本,支持字体、大小、颜色、对齐方式等多样设置。 2. **图像集成**:可以将JPEG、PNG、GIF等多种格式的图片插入到PDF中。 3. **表格创建**:生成复杂表格,支持多列、多行...

    java数据格式化

    `java.text`包提供了用于文本、日期和数值格式化的一系列类。这些类设计得与特定语言无关,使得Java程序能够以国际化的方式处理和显示数据。 ##### 1.1 `java.text.Format`类 `Format`是所有格式化类的基类,它...

    java日期格式化

    总结来说,Java提供了多种方式来处理日期和时间的格式化,包括传统的`java.util.Date`和`java.text.SimpleDateFormat`,以及Java 8引入的现代化API `java.time`。在实际开发中,应根据需求选择合适的工具,确保代码...

    java处理日期,data的格式化

    本篇将详细探讨如何使用Java处理日期,并进行格式化。 Java中的日期处理主要涉及到两个核心类:`java.util.Date` 和 `java.time` 包下的一系列类(自Java 8开始引入)。首先,我们来看看`java.util.Date`。这个类在...

    日历调整、时间调整、时间预测、以及Java.util包和Java.test包的简单运用,其中包含10个源代码文件,只需导入eclipse中即可编译、运行。

    `java.text.SimpleDateFormat`是格式化和解析日期的重要工具。它允许我们将日期对象转换为人类可读的字符串,反之亦然。例如,你可以定义一个模式如"yyyy-MM-dd HH:mm:ss",然后用`SimpleDateFormat.format(Date)`和...

    Java源代码当前日期的格式化.rar

    这个压缩包"Java源代码当前日期的格式化.rar"显然是为了帮助开发者理解如何在Java中格式化当前日期。下面将详细阐述Java中日期格式化的相关知识点。 1. **java.time包**:自Java 8引入的新时间日期API,它提供了...

    java格式化日期类

    总结起来,`java.text.SimpleDateFormat`是Java中用于日期和时间格式化的强大工具,通过模式字符串定义日期的显示格式,提供日期到字符串和字符串到日期的转换功能。熟练掌握这一工具类,能够帮助开发者更高效地处理...

    java来格式化日期为标准格式

    总结一下,Java提供了多种方式来格式化日期,以满足各种需求。`SimpleDateFormat`是传统的选择,而Java 8的新日期时间API则提供了更多功能和便利性。理解并熟练掌握这些日期格式化方法,对于任何Java开发者来说都是...

    java 时间格式转化 pdf

    根据提供的文件信息,本文将详细解释Java中时间与日期格式化的相关知识点,包括如何使用`java.text.DateFormat`类以及`java.text.SimpleDateFormat`类来进行日期格式的定制化处理,并且会额外介绍`java.util....

    java中日期格式的转换

    在Java编程语言中,日期和时间的处理是...通过上述示例,我们可以看到Java提供了丰富的工具和API来处理日期和时间的格式化与转换,这些技术在日常开发中极为常见,掌握它们对于任何Java开发者而言都是必不可少的技能。

    Java的日期格式化常用方法

    `java.time`包提供了丰富的API来完成日期和时间的格式化、解析以及计算等任务。本文将深入探讨Java中日期格式化的常用方法,主要关注`SimpleDateFormat`和`java.time`包下的`DateTimeFormatter`。 首先,`...

    java时间日期格式化工具类

    在Java编程语言中,时间日期处理是常见的任务之一,尤其在开发业务系统或者数据分析时,对日期进行格式化显得尤为重要。Java提供了多种处理日期和时间的API,包括`java.util.Date`、`java.text.SimpleDateFormat`、`...

    java将数字转换为时间格式

    - `type`:日期格式化模式,默认值为`yyyyMMdd`(年月日)。 3. **逻辑流程**: - 首先检查`type`是否为空或默认值,如果是,则设置为`yyyyMMdd`。 - 创建一个`SimpleDateFormat`实例,用于定义日期的格式。 - ...

    java运算java运算.doc

    df.format(你要格式化的数字); ``` 例如: ```java String result = new java.text.DecimalFormat("#.00").format(3.1415926); ``` 方式三:使用 String.format ```java double d = 3.1415926; String result = ...

    JAVA时间格式化处理-JAVA程序员JAVA工程师面试必看.pdf

    在Java编程中,时间格式化处理是至关重要的,特别是在开发商业应用或进行数据分析时。Java提供了多种类和方法来处理日期和时间,包括`java.util.Date`、`java.text.SimpleDateFormat`、`java.util.Calendar`以及`...

    Current-time-in-java.rar_Time

    在这里,`LocalTime.now()`返回当前时区的本地时间,`DateTimeFormatter`则用于格式化输出。 3. **使用`java.time.Clock`** 如果需要获取特定时区的时间,可以使用`java.time.Clock`类。例如,获取UTC时间: `...

Global site tag (gtag.js) - Google Analytics