格式化

日期时间格式化

  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

  输出结果:

  

posted on 2019-07-31 22:08  寇德·坡特  阅读(369)  评论(0编辑  收藏  举报

导航