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时代Texty年份YearM月份MonthW对应一个月的周数Numberw对应一年的周数NumberD对应一年的天数Numberd对应一个月的天数Numberu对应一周的天数NumberE星期Texta上下午TextH时,24小时制Numberh时,12小时制Numberm分Numbers秒NumberS毫秒Numberz时区General time zoneI. 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输出结果:
转载于:https://www.cnblogs.com/lqkStudy/p/11279446.html