首页 > 学院 > 开发设计 > 正文

格式化日期时间数字等等

2019-11-11 03:01:10
字体:
来源:转载
供稿:网友
   有专门负责格式处理的类。为了对格式化进行控制,可以使用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)
LocaleLocale(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;

NumberFormatstatic 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"));
Curreneystatic 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.DEFAULTDateFormat.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");来处理日期。

DateFormatstatic 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()设置或获得数字格式,用它来格式化那些表示年、月、日、小时、分、秒的时间。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表