目录
四、SimpleDateFormat(DateFormat的子类)
在不同的国家,数字的表示方式是不一样的,因此对数字表示将根据不同的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));
- }
- }

部分日期格式符:
| 模式字符 | 功能 |
| 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));
-
- }
- }

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));
-
- }
- }
