目录
四、SimpleDateFormat(DateFormat的子类)
五、Java8新增的DataTimeFormatter
一、数字格式化
在不同的国家,数字的表示方式是不一样的,因此对数字表示将根据不同的Locale来格式化
| 方法 | 功能 |
|---|---|
| static NumberFormat getNumberInstance() | 返回与当前系统信息相关的默认的数字格式器对象 |
| static NumberFormat getNumberInstance(Locale locale) | 返回指定Locale的数字格式器对象 |
| static NumberFormat getPercentInstance() | 返回与当前系统信息相关的默认的百分比格式器对象 |
| static NumberFormat getPercentInstance(Locale locale) | 返回指定Locale的百分比格式器对象 |
| String format(double number) | 将数字number格式化字符串返回 |
| Number parse(String str) | 将指定的字符串解析为Number对象 |
import java.text.NumberFormat;
import java.util.*;
public class MainClass {
public static void main(String[] args) {
Locale chinese = new Locale("zh","CN");
Locale us = new Locale("en","US");
NumberFormat zh_Number = NumberFormat.getNumberInstance(chinese);
NumberFormat en_Number = NumberFormat.getNumberInstance(us);
NumberFormat zh_Percent = NumberFormat.getPercentInstance(chinese);
NumberFormat en_Percent = NumberFormat.getPercentInstance(us);
System.out.println("数字格式化:");
System.out.println(zh_Number.format(12.345));
System.out.println(en_Number.format(12.345));
System.out.println("百分比格式化:");
System.out.println(zh_Percent.format(0.5));
System.out.println(en_Percent.format(0.5));
}
}
二、货币格式化
| 方法 | 功能 |
|---|---|
| static NumberFormat getCurrencyInstance() | 返回与当前系统信息相关的默认的货币格式器对象 |
| static NumberFormat getCurrencyInstance(Locale locale) | 返回指定Locale的货币格式器对象 |
import java.text.NumberFormat;
import java.util.Locale;
public class MainClass {
public static void main(String[] args){
Locale chinese = new Locale("zh","CN");
Locale us = new Locale("en","US");
NumberFormat rmb = NumberFormat.getCurrencyInstance(chinese);
NumberFormat doller = NumberFormat.getCurrencyInstance(us);
System.out.println("人民币:"+rmb.format(58.32));
System.out.println("美元:" +doller.format(58.32));
}
}
三、日期格式化
| 方法 | 功能 |
|---|---|
| static DateFormat getDateInstance() | 返回默认样式的日期格式器 |
| static DateFormat getDateInstance(int style) | 返回指定样式的日期格式器 |
| static DateFormat getDateInstance(int style,Locale locale) | 返回指定样式和Locale的日期格式器 |
| static DateFormat getTimeInstance() | 返回默认样式的时间格式器 |
| static DateFormat getTimeInstance(int style) | 返回指定样式的时间格式器 |
| static DateFormat getTimeInstance(int style,Locale locale) | 返回指定样式和Locale的时间格式器 |
| static DateFormat getDateTimeInstance() | 返回默认样式的日期时间格式器 |
| static DateFormat getDateTimeInstance(int dayStyle,int timeStyle) | 返回指定样式的日期时间格式器 |
| static DateFormat getDateTimeInstance(int dayStyle,int timeStyle,Locale locale) | 返回指定样式和Locale的日期时间格式器 |
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class MainClass {
public static void main(String[] args) {
Date now = new Date(); // 获取当前的日期时间
Locale locale1 = new Locale("zh","CN");
Locale locale2 = new Locale("en","US");
System.out.println("中文格式:");
Print(now,locale1);
System.out.println("英文格式:");
Print(now,locale2);
}
public static void Print(Date date, Locale locale){
DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,locale);
DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);
DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT,locale);
DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,locale);
System.out.println(df1.format(date));
System.out.println(df2.format(date));
System.out.println(df3.format(date));
System.out.println(df4.format(date));
}
}
四、SimpleDateFormat(DateFormat的子类)
部分日期格式符:
| 模式字符 | 功能 |
|---|---|
| D | 一年中的第几天 |
| d | 一月中的第几天 |
| E | 星期中的第几天 |
| y | 年 |
| H | 小时(0~23) |
| h | 小时(0~11),AM/PM区分上下午 |
| M | 月份 |
| m | 分钟 |
| S | 毫秒 |
| s | 秒 |
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormat_3 {
public static void main(String[] args) {
Date now = new Date();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("现在是yyyy年MM月dd日,是今年的第D天");
System.out.println(simpleDateFormat1.format(now));
System.out.println(simpleDateFormat2.format(now));
System.out.println(simpleDateFormat3.format(now));
}
}
五、Java8新增的DataTimeFormatter
DateTimeFormatter不仅可以将时间、日期对象格式化成字符串,还可将特定的字符串解析为时间、日期对象
获取DateTimeFormatter对象的方式:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
public class DateTimeFormatterDemo {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.now(); // 获取本地的日期时间
// 1.使用静态常量创建DateTimeFormatter对象
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
System.out.println(dateTime.format(dateTimeFormatter1));
System.out.println("-----------------------");
// 2.使用不同风格的枚举值创建DateTimeFormatter对象
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.SHORT);
System.out.println(dateTime.format(dateTimeFormatter2));
System.out.println("-----------------------");
// 3.使用模式字符串来创建DateTimeFormatter对象
DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dateTime.format(dateTimeFormatter3));
System.out.println("-----------------------");
// 1.解析字符串,成为日期和时间
String s1 = "2022-06-28 20:06:00"; // 定义一个任意格式的日期时间字符串
DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 定义解析用的格式器
LocalDateTime dateTime1 = LocalDateTime.parse(s1,dateTimeFormatter4);// 执行解析
System.out.println(dateTime1);
}
}
六、消息格式化
国际化软件需要根据用户的本地化消息输出不同的格式
MessageFormat可实现消息的动态处理:
| 构造方法 | 功能 |
|---|---|
| public MessageFormat(String pattern) | 根据指定的模式字符串创建MessageFormat对象 |
| public MessageFormat(String pattern,Locale locale) | 根据指定的模式字符串和语言环境创建MessageFormat对象 |
| 常用方法 | 功能 |
| public void applyPattern(String pattern) | 设置模式字符串 |
| public String toPattern() | 返回当前状态的模式字符串 |
| public setLocale(Locale locale) | 设置语言环境 |
| public final String format(Object obj) | 格式化一个对象生成一个字符串(Format提供的方法) |
| public static String format(String pattern,Object...arg) | 创建给定模式的MessageFormat对象,并使用该对象格式化给定的参数 |
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
public class MessageFormatDemo {
public static void main(String[] args) {
// 1.定义一个带占位符的模式字符串
String pattern = "{0}, 您好!当前日期时间为:{1}";
// 2.创建MessageFormat对象
MessageFormat messageFormat = new MessageFormat(pattern);
// 3.创建Locale对象,并调用setLocale()方法,设置MessageFormat对象的语言环境
Locale locale = Locale.getDefault();
messageFormat.setLocale(locale);
// 4.创建一个对象数组,并按照占位符的索引来组织数据
Object[] objects = {"亲爱的用户", new Date()};
// 5.调用format()方法实现消息格式化,并将对象数组作为该方法的参数
System.out.println(messageFormat.format(objects));
}
}