• 格式化


    日期时间格式化

      java.text.DateFormat类用于对日期时间进行格式化,它可以把Date对象格式化为字符串,或者是把字符串解析为Date对象:

        a.String format(Date date):把Date对象格式化为字符串。

        b.Date parse(String source) throws ParseException:把字符串解析为Date对象。

      DateFormat类本身是一个抽象类,无法直接通过new运算创建实例,创建实例需要使用其实现类java.text.SimpleDateFormat。SimpleDateFormat类常用的构造方法有:

        a.SimpleDateFormat(String pattern):传入模式字符串创建SimpleDateFormat对象。

        b.SimpleDateFormat(String pattern, Locale locale):传入模式字符串以及Locale对象创建SimpleDateFormat对象。

        其中,模式字符串是指使用日期时间格式化编码组成的字符串。常用的日期时间格式化编码有:

    字母 含义 格式
    G 时代 Text
    y 年份 Year
    M 月份 Month
    W 对应一个月的周数 Number
    w 对应一年的周数 Number
    D 对应一年的天数 Number
    d 对应一个月的天数 Number
    u 对应一周的天数 Number
    E 星期 Text
    a 上下午 Text
    H 时,24小时制 Number
    h 时,12小时制 Number
    m Number
    s Number
    S 毫秒 Number
    z 时区 General time zone

          I.  Text:如果字母数为4以上,则使用完整的形式;否则使用简短或缩写的形式。

          II. Number:字母数为数字最小位数,对于较短位数的数字前面补0。

          III.Year:如果字母数为2,则年份只输入后两位数字,年份区间为当前年份的80年前到20年后,即为(y-80, y+20]。例如:今年为2019年,则年份区间为(1939, 2039],此时39表示的是2039年,40表示的是1940年。如果字母数不为2则格式为Number。

          IV.Month:如果字母数为3以上则格式为Text;小于3则格式为Number。

          V. General time zone:如果时区有时区名,则格式为Text。对于使用GMT偏移值表示的时区,则语法为“GMT +|- 小时:00”。

    1 @Test
    2 void testDateFormat() {
    3     Date date = new Date();
    4     System.out.println(date);
    5     DateFormat df1 = new SimpleDateFormat("G y-M-d a h:m:s S E z", Locale.US);
    6     System.out.println(df1.format(date));
    7     DateFormat df2 = new SimpleDateFormat("GGGG yyyy-MMMM-dd aaaa hh:mm:ss SSS EEEE zzzz", Locale.US);
    8     System.out.println(df2.format(date));
    9 }
    testDateFormat

      输出结果:

      

      DateFormat类按日期时间字符串详细程度分为4种风格:FULL、LONG、MEDIUM、SHORT。

      可以调用DateFormat类的静态方法创建其对象:

        a.static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle):传入日期风格和时间风格创建DateFormat对象。

        b.static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale):传入日期风格、时间风格和Locale对象创建DateFormat对象。

     1 @Test
     2 void testDateFormat() {
     3     Date date = new Date();
     4     System.out.println(date);
     5     DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
     6     System.out.println(df1.format(date));
     7     DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
     8     System.out.println(df2.format(date));
     9     DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    10     System.out.println(df3.format(date));
    11     DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
    12     System.out.println(df4.format(date));
    13 }
    testDateFormat

      输出结果:

      

    数字格式化

      java.text.NumberFormat类可以将数字对象格式化为指定格式的字符串,也可以将数字字符串解析(采用四舍五入法保留有效位数)为对应的数字对象:

        a.String format(long number):将long型的对象格式化为数字字符串。

        b.String format(double number):将double型的对象格式化为数字字符串。

        c.parse(String source) throws ParseException:将数字字符串解析为Number对象。

      NumberFormat本身是一个抽象类,无法直接通过new运算创建实例,创建实例需要使用其实现类java.text.DecimalFormat。DecimalFormat类常用的构造方法有:

        a.DecimalFormat(String pattern):传入模式字符串创建DecimalFormat对象。

        其中,模式字符串是指使用数字格式化编码组成的字符串。常用的数字格式化编码有:

    符号 位置 含义
    0 数字 数字,若没有该位则显示0
    # 数字 数字,若没有该位则不显示
    . 数字 小数点
    - 数字 负号
    , 数字 分组符
    E 数字 指数符
    ; 子模式分隔 子模式分隔符
    % 前缀或后缀 百分符

    (u2030)

    前缀或后缀 千分符
    ' 前缀或后缀 将特殊符号用单引号括起来表示将该符号作为文本

        模式又分为两部分:正子模式和负子模式。正子模式是定义正数或零的模式,负子模式是定义负数的模式。模式必须包含正子模式,负子模式可有可无。如果需要显式地定义负子模式,则在正子模式后使用“;”进行区分。定义模式时需要注意以下几点:

          a.若没有定义负子模式,则负子模式默认为正子模式前加上“-”。

          b.负子模式和正子模式的前缀和后缀不能完全相同。若相同则表示为没有定义负子模式。

          c.负子模式只用于定义前缀和后缀,也就是说,负子模式定义数字格式是没有任何意义的。

          d.负子模式中使用“%”或“‰”仅作为前缀或后缀的作用,并不会对原数据造成改变。

          e.正子模式中使用“%”或“‰”除了作为前缀或后缀的作用,还会对原数据造成改变。若定义了负子模式,定义在正子模式中的“%”或“‰”只对负子模式的数据造成改变,不会添加“%”或“‰”符号。

     1 @Test
     2 void testNumberFormat() {
     3     System.out.println("--只定义了正子模式--");
     4     NumberFormat nf1 = new DecimalFormat("#.0");
     5     System.out.println(nf1.format(0));
     6     System.out.println(nf1.format(-1));
     7 
     8     System.out.println("--负子模式和正子模式的后缀完全相同--");
     9     NumberFormat nf2 = new DecimalFormat("#,###m;#m");
    10     System.out.println(nf2.format(123456789));
    11     System.out.println(nf2.format(-123456789));
    12 
    13     System.out.println("--负子模式中定义数字格式--");
    14     NumberFormat nf3 = new DecimalFormat("#;#.0m");
    15     System.out.println(nf3.format(0));
    16     System.out.println(nf3.format(-1));
    17 
    18     System.out.println("--负子模式使用%或‰--");
    19     NumberFormat nf4 = new DecimalFormat("#.0;#‰");
    20     System.out.println(nf4.format(0));
    21     System.out.println(nf4.format(-1));
    22 
    23     System.out.println("--正子模式使用%或‰--");
    24     NumberFormat nf5 = new DecimalFormat("#‰;#m");
    25     System.out.println(nf5.format(0));
    26     System.out.println(nf5.format(-1));
    27 }
    testNumberFormat 

      输出结果:

      

      NumberFormat分为4种类型:通用数字格式、整型数字格式、货币格式、百分比格式。

      可以调用NumberFormat类的静态方法创建其对象:

        a.static final NumberFormat getNumberInstance():创建通用数字格式的NumberFormat对象。

        b.static final NumberFormat getIntegerInstance():创建整型数字格式的NumberFormat对象。

        c.static final NumberFormat getCurrencyInstance():创建货币格式的NumberFormat对象。

        d.static final NumberFormat getPercentInstance():创建百分比格式的NumberFormat对象。

     1 @Test
     2 void testNumberFormat() {
     3     double number = 12345.67890;
     4     NumberFormat nf1 = NumberFormat.getNumberInstance();
     5     System.out.println(nf1.format(number));
     6     NumberFormat nf2 = NumberFormat.getIntegerInstance();
     7     System.out.println(nf2.format(number));
     8     NumberFormat nf3 = NumberFormat.getCurrencyInstance();
     9     System.out.println(nf3.format(number));
    10     NumberFormat nf4 = NumberFormat.getPercentInstance();
    11     System.out.println(nf4.format(number));
    12 }
    testNumberFormat

      输出结果:

      

  • 相关阅读:
    qml+opencv(二),实现人脸检测
    CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
    Qt文档系统分析(解释Qt文档的生成工具与过程)
    2015 最受开发者欢迎的开发工具和服务(摘录对自己有用的)
    RAD Studio 10 自带Demo代码汇总说明
    ACE 容器之三 ACE_Unbounded_Queue的使用
    开发快很重要——如果只看法语或者产品结果C++似乎很强大,但是参与这个C++的开发过程,就会感觉到这种痛苦(Google也是这个看法)
    我是觉得创业永远不晚 但是绝对要谨慎,不是破釜沉舟就一定能赢的(不用拿工资啊 吃喝拉撒在公司报账就好了)
    人生的成功与否,真的是以天来计算啊——时间永远都是最宝贵的!
    thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
  • 原文地址:https://www.cnblogs.com/lqkStudy/p/11279446.html
Copyright © 2020-2023  润新知