`

java字符串日期数字格式化处理大全

    博客分类:
  • Java
 
阅读更多
   在C中可以使用类似printf(“%d %8.2f\\n”, 1001, 52.335)的方法实现格式化输出,可是Java中的System.out.println()并没有对应的功能。要格式化输出,必须使用java.text包中的类来实现类似的操作(要不怎么体现面向对象的优越性呢,不过据说jdk1.5准备又补上)。当然了,java.text包的功能还是很强大的,奇怪的是很多书中都没有涉及,而一般谁又有工夫整天去看API?

    注意:由于这里说得很简略,因此请参照下面的Demo程序。

    格式化数字

    在NumberFormat类中为我们提供了格式化4种数字的方法:整数、小数、货币和百分比,通过工厂方法getNumberInstance, getNumberIntance, getCurrencyInstance, getPercentInstance方法获得相应的实例对象就行。例如我们要以字符串表示人民币88888.88元,这样来写就行:

    NumberFormat nf = NumberFormat.getCurrencyInstance();

    System.out.println(nf.format(88888.88));

    定制格式化数字

    可是对于稍微复杂一点的需求,NumberFormat就满足不了了,幸好java还提供了DecimalFormat实现定制的格式化。要使用DecimalFormat对象,必须提供给它提供一个格式化的模式(pattern):

    String pattern = …

    DecimalFormat df = new DecimalFormat(pattern);

    或者:

    DecimalFormat df = new DecimalFormat();

    df. applyPattern(pattern);

    然后就调用它的format方法就行了。

    所以关键就是这个模式怎么定义。在DecimalFormat类的JavaDoc中有模式的语法表示,不过很难说清楚(是我说不清楚,呵呵),请看看Demo自己多试试吧。下面是模式中某些字符的含义表:

    字符
     含义

    0
     一位数字,这一位缺失显示为0。用来补零

    #
     一位数字, 这一位缺失就不显示

    .
     小数点,不用多说了吧

    ,
     千位分隔符

    E
     科学计数法

    %
     百分比




    格式化日期

    把日期转化为字符串最简单的方法就是调用Date类的toString或者toLocaleString方法:

    System.out.println(new Date());

    输出:2004-8-7 8:16:14。可是如果我们想把月和日补成2位不要时分秒2004-08-07,这就不灵了。java.text.DateFormat提供了大量的工厂方法:getDateInstance(int style), getTimeInstance(int style), getDateTimeInstance(int dateStyle, int timeStyle)等等。其中style必须是DateFormat.LONG, DateFormat.MEDIUM, DateFormat.SHORT之一。Demo中的defaultDateFormat方法作了一个简单的实验。



    定制格式化日期:

    同样,java.text.SimpleDateFormat可以通过模式(pattern)实现定制格式化:

    String pattern = …

    SimpleDateFormat df = new SimpleDateFormat(pattern);

    或者:

    SimpleDateFormat df = new SimpleDateFormat();

    df. applyPattern(pattern);

    下面是SimpleDateFormat的javadoc中的一个模式符号简表:

    符号
     意义
     合法数值
     示例

    y
     Year
     Year
     1996; 96

    M
     Month in year
     Month
     July; Jul; 07

    d  [Page]
     Day in month
     Number
     10

    a
     Am/pm marker
     Text
     PM

    H
     Hour in day (0-23)
     Number
     0

    h
     Hour in am/pm (1-12)
     Number
     12

    m
     Minute in hour
     Number
     30

    s
     Second in minute
     Number
     55

    S
     Millisecond
     Number
     978

    z
     Time zone
     General time zone
     Pacific Standard Time; PST; GMT-08:00

    Z
     Time zone
     RFC 822 time zone
     -0800


    注意的是,符号的大小写意义是不同的,符号的个数也会导致输出不一样。例如用MM就会把1月份显示成01,而用M则不会补零。对于年份,两个yy会只输出两位年份,yyyy则会输出4位年份。

    实际上,上面的类还提供了很多其他方法,特别是用于本地化(Locale)定制格式化的方法,以及从字符串表示转化为相应对象的parse方法,还有把格式化结果附加到一个StringBuffer的方法(应该是用来提高性能)。

    最后是一个小Demo和输出结果:

    TestFormat.java:

    import java.text.*;

    import java.util.*;

    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; [Page]



       NumberFormat nf = 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(\"Integer \" + i + \" is displayed as \" + nfInt.format(i));



       NumberFormat nfNumber = NumberFormat.getNumberInstance();

       System.out.println(\"Double \" + x + \" is displayed as \" + nfNumber.format(x));



       NumberFormat nfPercent = NumberFormat.getPercentInstance();

       System.out.println(\"Percent \" + p + \" is displayed as \" + nfPercent.format(p));



       NumberFormat nfCurrency = NumberFormat.getCurrencyInstance();

       System.out.println(\"Currency \" + p + \" is displayed as \" + nfCurrency.format(c));



       //这里没有涉及相应的parse方法

    }



    public static void customNumberFormat() {

       double x = 1000.0 / 3;

       System.out.println(\"default output is \" + x);

       patternPrint(\"###,###.##\", x);

       patternPrint(\"####.##\", x);

       patternPrint(\"####.00\", x);

       patternPrint(\"####.0#\", x); [Page]

       patternPrint(\"00000.##\", x);

       patternPrint(\"$###,###.##\", x);

        patternPrint(\"0.###E0\", x);

       patternPrint(\"00.##%\", x);



       double y = 23.0012;

       System.out.println(\"default output is \" + y);

       patternPrint(\"###,###.##\", y);

       patternPrint(\"####.##\", y);

       patternPrint(\"####.00\", y);

       patternPrint(\"####.0#\", y);

       patternPrint(\"00000.##\", y);

       patternPrint(\"$###,###.##\", y);

       patternPrint(\"0.###E0\", y);

       patternPrint(\"00.##%\", y);



        }



        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());



           DateFormat df = DateFormat.getDateTimeInstance();

           System.out.println(df.format(date));



           DateFormat dfLong = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

           System.out.println(dfLong.format(date));



           DateFormat dfMedium = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,  [Page]

               DateFormat.MEDIUM);

           System.out.println(dfMedium.format(date));



           DateFormat dfShort = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

           System.out.println(dfShort.format(date));

        }



        public static void customDateFormat() {

           Date date = new Date();

           patternPrint(\"yyyy.MM.dd HH:mm:ss z\", date);  //两个MM, dd会导致补零

           patternPrint(\"yy年M月d日 HH时mm分\", date);  //两个yy就显示为两位年份

           patternPrint(\"EEE, MMM d, ’’yy\", date);

           patternPrint(\"h:mm a\", date);

           patternPrint(\"hh ’o’’clock’ a, zzzz\", date);

           patternPrint(\"yyyyy.MMMMM.dd GGG hh:mm aaa\", date);

           patternPrint(\"EEE, d MMM yyyy HH:mm:ss Z\", date);

           patternPrint(\"yyMMddHHmmssZ\", date);

        }



        public static void patternPrint(String pattern, Date date){

           SimpleDateFormat df = new SimpleDateFormat(pattern);

           System.out.println(df.format(date));

        }

    }



    输出:

    Integer 123456 is displayed as 123,456

    Double 882323.23523 is displayed as 882,323.235

    Integer 123456 is displayed as 123,456

    Double 882323.23523 is displayed as 882,323.235

    Percent 0.528 is displayed as 53%

    Currency 0.528 is displayed as ¥52.83



    default output is 333.3333333333333

    output for pattern ###,###.## is 333.33

    output for pattern ####.## is 333.33 [Page]

    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 2004-8-7 8:16:14

    2004-8-7 8:16:14

    2004年8月7日 上午08时16分14秒

    2004-8-7 8:16:14

    04-8-7 上午8:16



    2004.08.07 08:16:14 GMT+08:00

    04年8月7日 08时16分

    星期六, 八月 7, ’04

    8:16 上午

    08 o’clock 上午, GMT+08:00

    02004.八月.07 公元 08:16 上午

    星期六, 7 八月 2004 08:16:14 +0800

    040807081614+0800



摘自:http://wenku.baidu.com/view/dcf58eeb6294dd88d0d26b23.html
分享到:
评论

相关推荐

    Java字符串 日期 数字格式化输出.doc

    Java字符串 日期 数字格式化输出.docJava字符串 日期 数字格式化输出.docJava字符串 日期 数字格式化输出.docJava字符串 日期 数字格式化输出.docJava字符串 日期 数字格式化输出.docJava字符串 日期 数字格式化输出...

    Java字符串 日期 数字格式化输出-.doc

    java

    Java字符串_日期_数字格式化输出

    Java字符串_日期_数字格式化输出,特别适合初学者了解各个数据类型的操作和应用。

    Java进制/时间/日期/字符串/流算法大全

    JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的互换 取得服务器当前的各种具体时间 用...

    Java常用工具类(持续发布,第一部分:日期、字符串、JSON工具类等)

    包含了货币工具类(将数字货币转成大写)、日期工具类(日期格式化、日期相加减、日期差等)、半角和全角字符相互转换、JSON工具类(利用gson工具包)、字符串工具类(非空判断等)

    社会上常用的Java试题库

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,... 如何格式化日期

    java面试题大全--java基础,struts,spring,ejb等

    如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码...

    java常用工具类的使用

    接下来主要学习Java对日期时间的格式化和对数字的格式化处理。  日期时间格式化 Date类中包含了日期和时间,在Java编程中,日期通常指年、月、日,时间则指时、分、秒、毫秒。Java对Date进行格式化使用java.text...

    java 算法

    JAVA时间格式化处理 ,将毫秒转化为日期, 文本的倒序输出 ,判断一个数字是奇数还是偶数 ,用Hibernate实现分页, 35选7彩票程序 ,获取GMT8时间, 中文乱码转换 ,小标签 ,Big5字与Unicode的互换, 取得服务器...

    javascript.string.format:java的String.format()的Javascript实现;

    java 的 String.format() 的 Javascript 实现,增加了支持格式化百分比和后缀-SI,如 120M、30K。 将 Formatter.format() 移植到 javascript 的基本开始。 目前依赖 .toLocaleString() 进行命名日期格式。 请参阅...

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    Java开发技术大全(500个源代码).

    ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...

    java源码包---java 源码 大量 实例

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    JAVA 范例大全 光盘 资源

    实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 实例40 替换字符串中的部分字符 92 实例41 Java字符串之密码加密 93 实例42 正则表达式验证字符串 95 第7章 Java常用类 98 实例43 数字的舍入...

    JAVA上百实例源码以及开源项目

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    java版的算法大全

    Java的16进制与字符串的相互转换函数 JAVA时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 35选7彩票程序 中文乱码转换

    java jdk实列宝典 光盘源代码

    格式化数字;转换数字进制;生成随机数; 4数组和集合 使用Arrays类;动态调整数组长度;java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; ...

    java源码包4

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

Global site tag (gtag.js) - Google Analytics