JAVA常用类之格式化

日期格式化

在之前的博客中我们使用到了操作日期的一些类,我们发现,如果我们想要获得指定格式的日期字符串可以做到但是很麻烦,下面为大家介绍几种日期的格式化方式。

java.text.DateFormat

DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
DateFormat提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM和SHORT。
DateFormat可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:
myString = DateFormat.getDateInstance().format(myDate);
如果格式化多个日期,那么获取该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家/地区约定的信息了。

DateFormat df = DateFormat.getDateInstance();
for (int i = 0; i < myDate.length; ++i) {
   output.println(df.format(myDate[i]) + "; ");
}

要格式化不同语言环境的日期,可在getDateInstance()的调用中指定它。
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
还可使用DateFormat进行解析。
myDate = df.parse(myString);
使用getDateInstance来获取该国家/地区的标准日期格式。另外还提供了一些其他静态工厂方法。使用 getTimeInstance 可获取该国家/地区的时间格式。使用getDateTimeInstance 可获取日期和时间格式。可以将不同选项传入这些工厂方法,以控制结果的长度(从 SHORT 到 MEDIUM 到 LONG 再到 FULL)。确切的结果取决于语言环境,但是通常:

  • SHORT 完全为数字,如 12.13.52 或 3:30pm
  • MEDIUM 较长,如 Jan 12, 1952
  • LONG 更长,如 January 12, 1952 或 3:30:32pm
  • FULL 是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST

如果愿意,还可以在格式上设置时区。如果想对格式化或解析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获取的 DateFormat 强制转换为 SimpleDateFormat。这适用于大多数国家/地区;只是要记住将其放入一个 try 代码块中,以防遇到特殊的格式。

构造方法

方法名 说明
protected DateFormat() 创建一个新的 DateFormat

方法摘要

返回值 方法名 说明
Object clone() 重写 Cloneable
boolean equals(Object obj) 重写 equals
String format(Date date) 将一个 Date 格式化为日期/时间字符串
abstract StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition fieldPosition) 重写 Format
static Locale[] getAvailableLocales() 返回所有语言环境的数组,此类的 get*Instance 方法可以为其返回已本地化的实例
Calendar getCalendar() 获取与此日期/时间格式器关联的日历
static DateFormat getDateInstance() 获取日期格式器,该格式器具有默认语言环境的默认格式化风格
static DateFormat getDateInstance(int style) 获取日期格式器,该格式器具有默认语言环境的给定格式化风格
static DateFormat getDateInstance(int style, Locale aLocale) 获取日期格式器,该格式器具有给定语言环境的给定格式化风格
static DateFormat getDateTimeInstance() 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) 获取日期/时间格式器,该格式器具有默认语言环境的给定日期和时间格式化风格
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) 获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格
static DateFormat getInstance() 获取为日期和时间使用 SHORT 风格的默认日期/时间格式器
NumberFormat getNumberFormat() 获取此日期/时间格式器用于格式化和解析时间的数字格式器
static DateFormat getTimeInstance() 获取时间格式器,该格式器具有默认语言环境的默认格式化风格
static DateFormat getTimeInstance(int style) 获取时间格式器,该格式器具有默认语言环境的给定格式化风格
static DateFormat getTimeInstance(int style, Locale aLocale) 获取时间格式器,该格式器具有给定语言环境的给定格式化风格
TimeZone getTimeZone() 获取时区
int hashCode() 重写 hashCode
boolean isLenient() 判断日期/时间解析是否为不严格的
Date parse(String source) 从给定字符串的开始解析文本,以生成一个日期
abstract Date parse(String source, ParsePosition pos) 根据给定的解析位置开始解析日期/时间字符串
Object parseObject(String source, ParsePosition pos) 解析字符串中的文本,以生成一个 Date
void setCalendar(Calendar newCalendar) 设置此日期格式所使用的日历
void setLenient(boolean lenient) 指定日期/时间解析是否不严格
void setNumberFormat(NumberFormat newNumberFormat) 允许用户设置数字格式器
void setTimeZone(TimeZone zone) 为此 DateFormat 对象的日历设置时区

使用示例

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

public class DateFormatDemo {
   public static void main(String[] args) throws ParseException
   {
      // 获取日期格式器,该格式器具有默认语言环境的默认格式化风格
      DateFormat dateFormat = DateFormat.getDateInstance();
      // 格式化当前时间
      System.out.println(dateFormat.format(new Date()));
      // 解析字符串为时间
      System.out.println(dateFormat.parse("2015-12-26"));
      // 获取时间格式器,该格式器具有默认语言环境的默认格式化风格。
      DateFormat timeFormat = DateFormat.getTimeInstance();
      // 格式化当前时间
      System.out.println(timeFormat.format(new Date()));
      // 解析字符串为时间
      System.out.println(timeFormat.parse("21:40:02"));
   }
}

运行结果(以实际为准):
2015-12-26
Sat Dec 26 00:00:00 CST 2015
21:49:37
Thu Jan 01 21:40:02 CST 1970
2015-12-26 21:49:37
Sat Dec 26 21:49:21 CST 2015

java.text.SimpleDateFormat

上面介绍的DateFormat是日期格式化中最基本的方式,我们在实际应用开发中,使用最多的是SimpleDateFormat,而非DateFormat,SimpleDateFormat更加便捷。
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。可以根据需要使用 applyPattern 方法来修改格式模式。
日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘)引起来,以免进行解释。”””表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 都被保留):

字母 日期或时间元素 表示 示例
G Era 标志符 Text
y Year 1996;
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800

构造方法

方法名 说明
SimpleDateFormat() 用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用给定的模式和日期符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, Locale locale) 用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat

方法摘要

返回值 方法名 说明
void applyLocalizedPattern(String pattern) 将给定的本地化模式字符串应用于此日期格式
void applyPattern(String pattern) 将给定模式字符串应用于此日期格式
Object clone() 创建此 SimpleDateFormat 的一个副本
boolean equals(Object obj) 比较给定对象与此 SimpleDateFormat 的相等性
StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer
AttributedCharacterIterator formatToCharacterIterator(Object obj) 格式化生成 AttributedCharacterIterator 的对象
Date get2DigitYearStart() 返回在 100 年周期内被解释的两位数字年份的开始日期
DateFormatSymbols getDateFormatSymbols() 获取此日期格式的日期和时间格式符号的一个副本
int hashCode() 返回此 SimpleDateFormat 对象的哈希码值
Date parse(String text, ParsePosition pos) 解析字符串的文本,生成 Date
void set2DigitYearStart(Date startDate) 设置 100 年周期的两位数年份,该年份将被解释为从用户指定的日期开始
void setDateFormatSymbols(DateFormatSymbols newFormatSymbols) 设置此日期格式的日期和时间格式符号
String toLocalizedPattern() 返回描述此日期格式的本地化模式字符串
String toPattern() 返回描述此日期格式的模式字符串

使用示例

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
   public static void main(String[] args) throws ParseException
   {
      // 获得当前时间
      Date now = new Date();
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      // 格式化当前时间
      System.out.println(dateFormat.format(now));
      // 解析
      System.out.println(dateFormat.parse("2015-12-26 22:04:55"));
   }
}

运行结果(以实际为准):
2015-12-26 22:04:55
Sat Dec 26 22:04:55 CST 2015

数值格式化

java.text.NumberFormat

NumberFormat是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。
NumberFormat可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

构造方法

方法名 说明
protected NumberFormat() 唯一的构造方法

方法摘要

返回值 方法名 说明
Object clone() 重写 Cloneable
boolean equals(Object obj) 重写 equals
String format(double number) 格式规范
abstract StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) 格式规范
String format(long number) 格式规范
abstract StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) 格式规范
StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化一个数并将所得文本添加到给定字符串缓冲区
static Locale[] getAvailableLocales() 返回一个数组,它包含所有此类的 get*Instance 方法可以为其返回本地化实例的语言环境
Currency getCurrency() 获取格式化货币值时此数值格式使用的货币
static NumberFormat getCurrencyInstance() 返回当前默认语言环境的货币格式
static NumberFormat getCurrencyInstance(Locale inLocale) 返回指定语言环境的货币格式
static NumberFormat getInstance() 返回当前默认语言环境的通用数值格式
static NumberFormat getInstance(Locale inLocale) 返回指定语言环境的通用数值格式
static NumberFormat getIntegerInstance() 返回当前默认语言环境的整数格式
static NumberFormat getIntegerInstance(Locale inLocale) 返回指定语言环境的整数格式
int getMaximumFractionDigits() 返回数的小数部分所允许的最大位数
int getMaximumIntegerDigits() 返回数的整数部分所允许的最大位数
int getMinimumFractionDigits() 返回数的小数部分所允许的最小位数
int getMinimumIntegerDigits() 返回数的整数部分所允许的最小位数
static NumberFormat getNumberInstance() 返回当前默认语言环境的通用数值格式
static NumberFormat getNumberInstance(Locale inLocale) 返回指定语言环境的通用数值格式
static NumberFormat getPercentInstance() 返回当前默认语言环境的百分比格式
static NumberFormat getPercentInstance(Locale inLocale) 返回指定语言环境的百分比格式
RoundingMode getRoundingMode() 获取在此 NumberFormat 中使用的 RoundingMode
int hashCode() 重写 hashCode
boolean isGroupingUsed() 如果此格式中使用了分组,则返回 true
boolean isParseIntegerOnly() 如果此格式只将数作为整数解析,则返回 true
Number parse(String source) 解析给定字符串开头的文本,生成一个数值
abstract Number parse(String source, ParsePosition parsePosition) 如果可能则返回 Long (例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 范围内且没有小数),否则返回 Double
Object parseObject(String source, ParsePosition pos) 解析字符串中的文本,以生成一个 Number
void setCurrency(Currency currency) 设置格式化货币值时此数值格式使用的货币
void setGroupingUsed(boolean newValue) 设置此格式中是否使用分组
void setMaximumFractionDigits(int newValue) 设置数的小数部分所允许的最大位数
void setMaximumIntegerDigits(int newValue) 设置数的整数部分所允许的最大位数
void setMinimumFractionDigits(int newValue) 设置数的小数部分所允许的最小位数
void setMinimumIntegerDigits(int newValue) 设置数的整数部分所允许的最小位数
void setParseIntegerOnly(boolean value) 设置数是否应该仅作为整数进行解析
void setRoundingMode(RoundingMode roundingMode) 设置在此 NumberFormat 中使用的 RoundingMode

使用示例

import java.text.NumberFormat;
import java.text.ParseException;

public class NumberFormatDemo {
   public static void main(String[] args) throws ParseException
   {
      double d = 0.51234;
      // 当前默认语言环境的货币格式
      NumberFormat currency = NumberFormat.getCurrencyInstance();
      System.out.println(currency.format(d));
      // 当前默认语言环境的整数格式
      NumberFormat integer = NumberFormat.getIntegerInstance();
      System.out.println(integer.format(d));
      // 当前默认语言环境的通用数值格式
      NumberFormat number = NumberFormat.getNumberInstance();
      System.out.println(number.format(d));
      // 当前默认语言环境的百分比格式
      NumberFormat percent = NumberFormat.getPercentInstance();
      System.out.println(percent.format(d));
   }
}

运行结果:
¥0.51
1
0.512
51%

java.text.DecimalFormat

DecimalFormat与NumberFormat的关系就好像SimpleDateFormat与DateFormat之间的关系。
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。

  • 特殊模式字符
    模式中的很多字符都是按字面解释的;在解析期间对其进行匹配,在格式化期间则不经改变地输出。另一方面,特殊字符代表了其他字符、字符串或字符类。如果要将其作为字面量出现在前缀或后缀中,那么除非另行说明,否则必须对其加引号。
    下列字符用在非本地化的模式中。已本地化的模式使用从此格式器的 DecimalFormatSymbols 对象中获得的相应字符,这些字符已失去其特殊状态。两种例外是货币符号和引号,不将其本地化。
符号 位置 本地化? 含义
0 数字 阿拉伯数字
# 数字 阿拉伯数字,如果不存在则显示为 0
. 数字 小数分隔符或货币小数分隔符
- 数字 减号
, 数字 分组分隔符
E 数字 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号
; 子模式边界 分隔正数和负数子模式
% 前缀或后缀 乘以 100 并显示为百分数
\u2030 前缀或后缀 乘以 1000 并显示为千分数
¤ (\u00A4) 前缀或后缀 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符
前缀或后缀 用于在前缀或或后缀中为特殊字符加引号,例如 “’#’#” 将 123 格式化为 “#123”。要创建单引号本身,请连续使用两个单引号:”# o”clock”
  • 科学计数法
    科学计数法中的数表示为一个尾数和一个 10 的几次幂的乘积,例如可将 1234 表示为 1.234 x 10^3。尾数的范围通常是 1.0 <= x < 10.0,但并非必需如此。可指示 DecimalFormat 仅通过某个模式 来格式化和解析科学计数法表示的数;目前没有创建科学计数法格式的工厂方法。在这个模式中,指数字符后面紧跟着一个或多个数字字符即指示科学计数法。示例:”0.###E0” 将数字 1234 格式化为 “1.234E3”。
    • 指数字符后面的数字位数字符数给出了最小的指数位数。没有最大值。使用本地化的减号来格式化负数指数,不 使用模式中的前缀和后缀。这就允许存在诸如 “0.###E0 m/s” 等此类的模式。
    • 最小和最大整数数字位数一起进行解释:
      如果最大整数数字位数大于其最小整数数字位数并且大于 1,则强制要求指数为最大整数数字位数的倍数,并将最小整数数字位数解释为 1。最常见的用法是生成工程计数法,其中指数是 3 的倍数,如 “##0.#####E0”。使用此模式时,数 12345 格式化为 “12.345E3”,123456 则格式化为 “123.456E3”。
      否则通过调整指数来得到最小整数数字位数。示例:使用 “00.###E0” 格式化 0.00123 时得到 “12.3E-4”。
    • 尾数中的有效位数是最小整数 和最大小数 位数的和,不受最大整数位数的影响。例如,使用 “##0.##E0” 格式化 12345 得到 “12.3E3”。要显示所有位数,请将有效位数计数设置为零。有效位数不会影响解析。
    • 数模式可能不包含分组分隔符。
  • 舍入
    DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。
  • 阿拉伯数字
    为了进行格式化,DecimalFormat 使用 DecimalFormatSymbols 对象中所定义的、从已本地化的阿拉伯数字 0 开始的 10 个连续字符作为阿拉伯数字。为了进行解析,可识别 Character.digit 所定义的这些阿拉伯数字和所有 Unicode 十进制阿拉伯数字。
  • 特殊值
    NaN 被格式化为一个字符串,通常具有单个字符 \uFFFD。此字符串由 DecimalFormatSymbols 对象所确定。这是唯一不使用前缀和后缀的值。
    无穷大的值被格式化为一个字符串,通常具有单个字符 \u221E,具有正数或负数前缀和后缀。无穷大值的字符串由 DecimalFormatSymbols 对象所确定。
    将负零(”-0”)解析为:
    • 如果 isParseBigDecimal() 为 true,则为 BigDecimal(0),
    • 如果 isParseBigDecimal() 为 false 并且 isParseIntegerOnly() 为 true,则为 Long(0),
    • 如果 isParseBigDecimal() 和 isParseIntegerOnly() 均为 false,则为 Double(-0.0)。

构造方法

方法名 说明
DecimalFormat() 使用默认模式和默认语言环境的符号创建一个 DecimalFormat
DecimalFormat(String pattern) 使用给定的模式和默认语言环境的符号创建一个 DecimalFormat
DecimalFormat(String pattern, DecimalFormatSymbols symbols) 使用给定的模式和符号创建一个 DecimalFormat。

方法摘要

返回值 方法名 说明
void applyLocalizedPattern(String pattern) 将给定的模式应用于此 Format 对象
void applyPattern(String pattern) 将给定的模式应用于此 Format 对象
Object clone() 标准重写;没有语义上的变化
boolean equals(Object obj) 重写 equals
StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) 格式化一个 double 值,以生成一个字符串
StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition) 格式化一个 long 值,以生成一个字符串
StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化一个数,并将所得文本追加到给定的字符串缓冲区
AttributedCharacterIterator formatToCharacterIterator(Object obj) 格式化一个 Object,以生成一个 AttributedCharacterIterator
Currency getCurrency() 获取格式化货币值时,此十进制格式使用的货币
DecimalFormatSymbols getDecimalFormatSymbols() 返回小数格式符号的一个副本,通常程序员或用户不改变此副本
int getGroupingSize() 返回分组大小
int getMaximumFractionDigits() 获取某个数的小数部分中所允许的最大数字位数
int getMaximumIntegerDigits() 获取某个数的整数部分中所允许的最大数字位数
int getMinimumFractionDigits() 获取某个数的小数部分中所允许的最小数字位数
int getMinimumIntegerDigits() 获取某个数的整数部分中所允许的最小数字位数
int getMultiplier() 获取百分数、千分数和类似格式中使用的乘数
String getNegativePrefix() 获取负数前缀
String getNegativeSuffix() 获取负数后缀
String getPositivePrefix() 获取正数前缀
String getPositiveSuffix() 获取正数后缀
RoundingMode getRoundingMode() 获取在此 DecimalFormat 中使用的 RoundingMode
int hashCode() 重写 hashCode
boolean isDecimalSeparatorAlwaysShown() 允许获取整数中小数分隔符的行为
boolean isParseBigDecimal() 返回 parse(java.lang.String, java.text.ParsePosition) 方法是否返回 BigDecimal
Number parse(String text, ParsePosition pos) 解析字符串中的文本,以生成一个 Number
void setCurrency(Currency currency) 设置格式化货币值时,此数字格式使用的货币
void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols) 设置小数格式符号,通常程序员或用户不改变此符号
void setDecimalSeparatorAlwaysShown(boolean newValue) 允许设置整数中小数分隔符的行为
void setGroupingSize(int newValue) 设置分组大小
void setMaximumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最大数字位数
void setMaximumIntegerDigits(int newValue) 设置某个数字的整数部分中所允许的最大数字位数
void setMinimumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最小数字位数
void setMinimumIntegerDigits(int newValue) 设置某个数字的整数部分中所允许的最小数字位数
void setMultiplier(int newValue) 设置百分数、千分数和类似格式中使用的乘数
void setNegativePrefix(String newValue) 设置负数前缀
void setNegativeSuffix(String newValue) 设置负数后缀
void setParseBigDecimal(boolean newValue) 设置 parse(java.lang.String, java.text.ParsePosition) 方法是否返回 BigDecimal
void setPositivePrefix(String newValue) 设置正数前缀
void setPositiveSuffix(String newValue) 设置正数后缀
void setRoundingMode(RoundingMode roundingMode) 设置在此 DecimalFormat 中使用的 RoundingMode
String toLocalizedPattern() 合成一个表示此 Format 对象当前状态的、已本地化的模式字符串
String toPattern() 合成一个表示此 Format 对象当前状态的模式字符串

使用示例

import java.text.DecimalFormat;
import java.text.ParseException;

public class DecimalFormatDemo {
   public static void main(String[] args) throws ParseException
   {
      double d = 0.51;
      DecimalFormat format1 = new DecimalFormat("00.000");
      System.out.println(format1.format(d));
      DecimalFormat format2 = new DecimalFormat("#0.000");
      System.out.println(format2.format(d));
      DecimalFormat format3 = new DecimalFormat("0.###");
      System.out.println(format3.format(d));
   }
}

运行结果:
00.510
0.510
0.51

你可能感兴趣的:(java,日期格式化,格式化,数值格式化)