格式化日期时间数字等等

   有专门负责格式处理的类。为了对格式化进行控制,可以使用Locale类。为了描述locale,你要参考语言、国家代码和变量(如果有的话)并把这些字符串发送给Locale类的构造器。
Locale a = new Locale("zh");
Locale b = new Locale("zh","CN");
Locale c = new Locale("zh","CN","B");

   为了方便起见, Java SE预定义了大量的locale对象,Locale.CHINA,Locale.CANADA等。Java SE还预定义了大量的语言locale,它们只设定了语言而没有位置:Locale.CHINESE,Locale.ENGLISH等。

   除了构建一个locale或使用预定义的locale外,还可以有两种方法来获得一个locale对象。Locale类的静态getdefault方法可以获得作为本地操作系统的一部分而存放的默认locale。可以调用setDefault来改变默认的Java locale;但是,这种改变只对你的程序有效,不会对操作系统产生影响。最后,对于所有依赖locale的类,可以返回一个它们所支持的locale数组。

Locale[] a = DateFormat.getAvailableLocales()
   一旦有了一个locale,你能用它做什么呢?答案是它所能做的事情很有限。 Locale类中惟一有用的是那些定义语言和国家代码的方法,其中最重要的一个是getdisplayName,它返回一个描述locale的字符串。这个字符串并不包含前面所说的由两个字母组成的代码,而是以一种面向用户的形式来表现。
	Locale a = new Locale("zh","CN");
	System.out.println(a.getDisplayName());输出 中文(中国)
	System.out.println(a.getDisplayName(Locale.JAPANESE));中国語 (中華人民共和国)
	System.out.println(a.getDisplayName(Locale.ENGLISH));Chinese (China)
Locale
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
用给定的语言、国家和变量创建一个locale。
static Locale getDefault()返回默认的locale。
static void setDefault(Locale loc)设定默认的locale。
String getDisplayName()返回一个在当前的locale中所表示的用来描述locale的名字。
String getDisplayName(Locale loc)返回一个在给定的locale中所表示的用来描述locale的名字。
String getLanguage()返回语言代码,它是两个小写字母组成的ISO-639代码。
String getDisplayLanguage()返回在当前locale中所表示的语言名称。
String getDisplayLanguage(Locale loc)返回在给定locale中所表示的语言名称。
String getCountry()返回国家代码,它是由两个大写字母组成的ISO-3166代码。
String getDisplayCountry()返回在当前locale中所表示的国家名。
String getDisplayCountry(Locale loc)返回在当前locale中所表示的国家名。
String getVariant()返回locale中变量的字符串。
String getDisplayVariant()返回在当前locale中所表示的变量名称。
String getDisplayVariant(Locale loc)返回在给定locale中所表示的变量名称。
String toString()返回locale的描述,包括语言、国家和变量,用下划线分隔(比如, “ de_CH”)。

数字格式

Java类库提供了一个格式器(formatter)对象的集合,可以对java.text包中的数字值进行格式化和解析。
1.得到locale对象。
2.使用一个“工厂方法”得到一个格式器对象。
3.使用这个格式器对象来完成格式化和解析工作。

   工厂方法是NumberFormat类的一个静态方法,它接受一个Locale类型的参数。总共有3个工厂方法: getNumberInstance、 getCurrencyInstance和getPercentInstance,这些方法返回的对象可以分别对数字、货币量和百分比进行格式化和解析。

	Locale a = new Locale("de","DE");
	NumberFormat nf = NumberFormat.getCurrencyInstance(a);
	double b = 1234.57687;
	String string = nf.format(b);
	System.out.println(string);输出1.234,58 €
   相反地,如果要想读取一个按照某个locale的规定而输入或存储的数字,那么就需要使用parse方法。比如,下面的代码解析了用户输入到文本框中的值。 parse方法能够处理小数点和分隔符以及其他语言中的数字。
parse的返回类型是抽象类型的Number。返回的对象是一个Double或Long的包装器类,这取决于被解析的数字是否是浮点数。如果两者都可以接 受,可以使用Number类中的doubleValue方法来读取被包装的数字。Number类型的对象并不能自动转换成相关的基本类型,因此,不能直接将一个Number对象赋给一个基本类型,而应该使用doubleValue或intValue方法。
   如果数字文本的格式不正确,该方法会抛出一个ParseException异常。例如,字符串以空格开头是不允许的(可以调用trim方法来去掉空格)。但是,任何跟在数字之后的字符都将被忽略,所以这些跟在后面的字符是不会引起异常的。
可以用静态的getAvailableLocales方法得到一个当前所支持的locale对象列表。这个方法返回一个locale对象数组,从中可以获得针对它们的数字格式器对象。

可以用DecimalFormat df = new DecimalFormat("#.00");来处理数字。表示小数点后两位,不足补0。但是0.12format后变为.12;

NumberFormat
static Locale[] getAvailableLocales()返回一个Locale对象的数组,其成员包含有NumberFormat 格式器。
static NumberFormat getNumberInstance()
static NumberFormat getNumberInstance(Locale l)
static NumberFormat getCurrencyInstance()
static NumberFormat getCurrencyInstance(Locale l)
static NumberFormat getPercentInstance()
static NumberFormat getPercentInstance(Locale l)
当当前的或给定的locale提供处理数字、货币值或百分比的格式器。
String format(double x)
String format(long x)
对给定的浮点数或整数进行格式化并以字符串的形式返回结果。
Number parse(String s)
解析给定的字符串并返回数字值,如果输入字符串描述了一个浮点数,返回类型就是Double,否则返回类型就是Long。字符串必须以一个数字开头;以空格开头是不允许的。
数字之后可以跟随其他字符,但它们都将被忽略。解析失败时抛出ParseException异常。
void setParseIntegerOnly(boolean b)
boolean isParseIntegerOnly()
设置或获取一个标识,该标识指示这个格式器是否应该只解析整数值。
void setGroupingUsed(boolean b)
boolean isGroupingUsed()
设置或获取一个标识,该标识指示这个格式器是否会添加十进制分隔符(比如100 000)。
void setMinimumIntegerDigits(int n)
int getMinimumIntegerDigits()
void setMaximumIntegerDigits(int n)
int getMaximumIntegerDigits()
void setMinimumFractionDigits(int n)
int getMinimumFractionDigits()
void setMaximumFractionDigits(int n)
int getMaximumFractionDigits()
设置或获取整数或小数部分所允许的最大或最小位数。
   为了格式化货币值,可以使用NumberFormat.getCurrencyInstance方法。但是,这个方法的灵活性不好,它返回一个只针对一种货币的格式器。 使用Currency类来控制被格式器所处理的货币。可以通过将一个货币标识符传给静态的Currency.getInstance方法来得到一个Currency对象,然后对每一个格式器都调用setCurrency方法。
		Locale a = new Locale("de","DE");
		NumberFormat nf = NumberFormat.getCurrencyInstance(a);
		nf.setCurrency(Currency.getInstance("zh"));
Curreney
static Currency getInstance(String currencyCode)
static Currency getInstance(Locale locale)
返回与给定的ISO 4217货币代号匹配的Currency实例或返回与给定locale对应的国家。
String toString()
String getCurrencyCode()
获取货币的ISO 4217代码。
String getSymbol()
String getSymbol(Locale locale)
根据默认或给定的locale得到货币的格式化符号。比如美元的格式化符号可能是“ $”或“ US$”,具体是哪种形式依赖于locale。
int getDefaultFractionDigits()
获取货币值小数点后的默认位数。

时间和日期

当格式化日期和时间时,需要考虑4个与locale相关的问题:
月份和星期应该用本地语言来表示。
年月日的顺序要符合本地习惯。
公历可能不是本地首选的日期表示方法。
必须要考虑本地的时区。

   Java的DateFormat类可以处理这些问题。它和NumberFormat类很相似,用起来很容易。首先,得到一个locale,可以使用默认的locale或调用静态的getAvailableLocales方法来得到一个支持日期格式化的locale数组。

		DateFormat df = DateFormat.getDateInstance(style, Locale);
		DateFormat.getTimeInstance(style, aLocale)
		DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale)
为了设定想要的风格,这些工厂方法有一个参数,它可以是以下某个值:
DateFormat.DEFAULT
DateFormat.FULL (例如,按照美国locale,日期格式为 Wednesday, September 12, 2007 8:51:03 PM PDT)
DateFormat.LONG (例如,按照美国locale,日期格式为September 12, 2007 8:51:03 PM PDT)
DateFormat.MEDIUM (例如,按照美国locale,日期格式为Sep 12, 2007 8:51:03 PM)
DateFormat.SHORT (例如,按照美国locale,日期格式为9/12/07 8:51 PM


可以使用SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");来处理日期。

DateFormat
static Locale[] getAvailableLocales()
返回一个Locale对象的数组,可以对这些对象使用DateFormat格式器。
static DateFormat getDateInstance(int dateStyle)
static DateFormat getDateInstance(int dateStyle, Locale l)
static DateFormat getTimeInstance(int timeStyle)
static DateFormat getTimeInstance(int timeStyle, Locale l)
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale l)
为默认或指定的locale返回一个日期格式器、时间格式器或日期和时间的格式器。
参数: dateStyle, timeStyle DEFAULT、 FULL、 LONG、 MEDIUM、 SHORT之一
String format(Date d)对给定的日期/时间进行格式化,并返回结果。
Date parse(String s)
解析给定的字符串,返回其中描述的日期/时间。字符串必须以日期或时间开头;以空格开头是不允许的。日期后可以跟其他字符,但它们会被忽略。如果解析没有成功,则抛
出ParseException异常。
void setLenient(boolean b)
boolean isLenient()
设置或获得一个标志,它标记解析时是采用宽松的还是严格的方式。在宽松模式下,像February 30, 1999这样的日期会被自动转换成March 2, 1999。它是默认的模式。
void setCalendar(Calendar cal)
Calendar getCalendar()
设置或获得Calendar对象,可以用它来从Date对象中获取年、月、日、小时、分钟和秒。如果不想使用该locale的默认日历(一般是公历),就使用这个方法。
void setTimeZone(TimeZone tz)
TimeZone getTimeZone()
设置或获得格式化时间的时区对象。如果不想让locale使用默认时区,可以使用这个方法。默认时区是默认locale的时区,可以从操作系统中得到它。对于其他locale,应该使用和
地理位置相对应的时区。
void setNumberFormat(NumberFormat f)
NumberFormat getNumberFormat()
设置或获得数字格式,用它来格式化那些表示年、月、日、小时、分、秒的时间。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值