作用:将数字类,字符串类,时间类按自己设置的格式输出
包 子类 |
java.text.Format | java.time.format |
---|---|---|
数字类 | NumberFormat:数字格式化, 抽象类 DecimalFormat:数字格式化 |
|
字符串类 | MessageFormat:字符串格式化 | |
时间类 | DateFormat:日期/时间格式化, 抽象类 | DateTimeFormatter:日期/时间格式化 |
DecimalFormat 工厂模式
例如:将1234567格式化输出为1,234,567
符号 | 内容 |
---|---|
# | 用于表示整数部分为0时 , #认为整数不存在,可不写 用于表示小数部分时,#代表最多有几位(四舍五入) 用于表示整数部分有多位时,#正常表示 |
0 | 用于表示整数部分为0时 ,0认为没有,但至少写一位,写0 用于表示小数部分时,0代表必须有且只能有几位(四舍五入) 用于表示整数部分有多位时,0正常表示 |
栗子展示:
import java.text.DecimalFormat;
public class zxc {
public static void main(String[] args) {
DecimalFormat d1,d2;
System.out.println("整数部分为0的情况,0/#的区别:");
// 整数部分为0 , #认为整数不存在,可不写; 0认为没有,但至少写一位,写0
d1 = new DecimalFormat("#.00");
d2 = new DecimalFormat("0.00");
System.out.println(d1.format(0.1)); // .10
System.out.println(d2.format(0.1)); // 0.10
System.out.println("小数部分0/#的区别");
//#代表最多有几位,0代表必须有且只能有几位
d1 = new DecimalFormat("0.00");
d2 = new DecimalFormat("0.##");
System.out.println(d1.format(0.1)); // 0.10
System.out.println(d2.format(0.1)); // 0.1
System.out.println(d1.format(0.006)); // 0.01
System.out.println(d2.format(0.006)); // 0.01
System.out.println("整数部分有多位");
//0和#对整数部分多位时的处理是一致的 就是有几位写多少位
d1 = new DecimalFormat("0.00");
d2 = new DecimalFormat("#.00");
System.out.println(d1.format(2)); // 2.00
System.out.println(d2.format(2)); // 2.00
System.out.println(d1.format(20)); // 20.00
System.out.println(d2.format(20)); // 20.00
System.out.println(d1.format(200)); // 200.00
System.out.println(d2.format(200)); // 200.00
}
}
输出:
整数部分为0的情况,0/#的区别:
.10
0.10
小数部分0/#的区别
0.10
0.1
0.01
0.01
整数部分有多位
2.00
2.00
20.00
20.00
200.00
200.00
import java.text.DecimalFormat;
public class zxc {
public static void main(String[] args) {
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34)); //12.3
System.out.println(df2.format(12.34)); //12.3
System.out.println(df3.format(12.34)); //012.340
System.out.println(df4.format(12.34)); //12.34
DecimalFormat df5 = new java.text.DecimalFormat("0.00");// 保留2位小数
double d1 = 123456789.123456;
double d2 = 987654321.987654321;
System.out.println("format1_d1=" + df5.format(d1));// 输出format1_d1=123456789.12
System.out.println("format1_d2=" + df5.format(d2));// format1_d2=987654321.99
DecimalFormat df6 = new DecimalFormat("#,##0.00");//定义输出格式:每隔是三个数使用逗号隔开
System.out.println("format2_d1=" + df6.format(d1));//format2_d1=123,456,789.12
System.out.println("format2_d2=" + df6.format(d2));//format2_d2=987,654,321.99
}
}
输出:
12.3
12.3
012.340
12.34
format1_d1=123456789.12
format1_d2=987654321.99
format2_d1=123,456,789.12
format2_d2=987,654,321.99
支持多个参数-值对位复制文本
支持变量的自定义格式
一个{}对应一个值
例如:将”Hello {1}”根据变量值格式化为Hello World
import java.text.MessageFormat;
public class zxc {
public static void main(String[] args) {
String message = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}";
//模板(支持多个参数-值对位复制文本):一个位置,对应一个字母【从0开始计算位置】
Object[] array = new Object[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"};
//要格式化的内容
String value = MessageFormat.format(message, array); //(模板,要格式化的内容)
System.out.println(value);
//自定义模板(支持变量的自定义格式):如下就是定义第一个元素【0】,输出为数字型【number】,输出格式为【#.##】
message = "{0,number,#.##} is the 派";
//要格式化的内容
array = new Object[]{new Double(3.1415)};
value = MessageFormat.format(message, array); //(模板,要格式化的内容)
System.out.println(value);
}
}
输出:
ABCDEFGHIJKLMNOPQ
3.14 is the 派
SimpleDateFormat 工厂模式
parse:将字符串格式化为时间对象
format:将时间对象格式化为字符串
例如:如将当前时间转为化YYYY-MM-DD HH24:MI:SS输出
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateTest {
public static void main(String[] args){
String strDate = "2008-10-19 10:11:30.345" ;
// 准备第一个模板,从字符串中提取出日期数字
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ;
// 准备第二个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
Date d = null ;
try{
d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
}catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace() ; // 打印异常信息
}
System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
}
}
输出:
2008年10月19日 10时11分30秒345毫秒
JDK 8 发布, 线程安全(vs SimpleDateFormat 线程不安全)
ofPattern: 设定时间格式
parse:将字符串格式化为时间对象
format:将时间对象格式化为字符串
如将当前时间转为化YYYY-MM-DD HH24:MI:SS输出
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatterTest {
public static void main(String[] args) {
//将字符串转化为时间
String dateStr= "2016年10月25日";//字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");//设定为时间格式
LocalDate date= LocalDate.parse(dateStr, formatter);
System.out.println(date.getYear() + "-" + date.getMonthValue() + "-" + date.getDayOfMonth());
//将日期转换为字符串输出
LocalDateTime now = LocalDateTime.now();//当前时间
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 hh:mm:ss");
String nowStr = now.format(format);
System.out.println(nowStr);//输出为字符串型
}
}
输出:
2016-10-25
2020年05月18日 09:15:44