不同地区(Locale)默认时间输出格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同地区(Locale)默认时间输出格式相关的知识,希望对你有一定的参考价值。

比如说,
US的默认时间输出格式:Wed, Mar 28, 2012 3:29 am
中国默认时间输出格式: 2012/05/19 03:29

问题就是,不要用dataformat参数(比如 yyyy/MM/dd ..)
有没有JDK或者第三方jar包(比如说joda-time这类的jar包) 实现了类似下面这种API:
String getDefaultDataFormat(Date d, Locale l)

您所在的位置:读书频道 > 设计开发 > Java系列 > 10.2.7 显示所有Locale的数字格式

10.2.7 显示所有Locale的数字格式2009-12-15 16:08 刘京华 清华大学出版社 我要评论(0) 字号:T | T
综合评级:
想读(32) 在读(6) 已读(6) 品书斋鉴(2) 已有44人发表书评
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》第10章资源国际化,本章将系统地讲解Java Web系统中的资源国际化解决方案。本书所有源代码位于项目i18n下面。本节为大家介绍显示所有Locale的数字格式。

AD:

10.2.7 显示所有Locale的数字格式

常用的数据包括数字、日期、时间、百分数、货币等。不同地区间的表示方法会有略微的不同,有的甚至截然相反。例如"1,000",美国人认为是1千,但是欧洲人认为是1。如果显示不对的话,差别会非常大。因此JSP中显示数据时尽量用JSTL标签,它是支持资源国际化的,能够自动根据客户的Locale选择合适的数据格式。也可以使用支持资源国际化的标签,如Struts标签、Spring标签、JSF标签等。

(点击查看大图)图10.6 Java类的Externalize操作

下面的程序使用JSTL标签显示所有Locale下的数据格式:

代码10.10 setLocale.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@page import="java.util.Locale"%> <% request.setAttribute("localeList", Locale.getAvailableLocales()); %> <table> <tr class="title"> <th>Locale</th> <th>Language</th> <th>Date and Time</th> <th>Number</th> <th>Currency</th> <th>Percent</th> </tr> <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> <c:forEach var="locale" items="$ localeList "> <fmt:setLocale value="$ locale " /> <tr> <td align="left">$ locale.displayName </td> <td align="left">$ locale.displayLanguage </td> <td><fmt:formatDate value="$ date " type="both"/></td> <td><fmt:formatNumber value="10000.5" /></td> <td><fmt:formatNumber value="10000.5" type="currency" /> </td> <td><fmt:formatNumber value="10000.5" type="percent" /> </td> </tr> </c:forEach> </table> <fmt:formatDate />标签与<fmt:formatNumber />标签的详细用法请参看第8章。运行效果如图10.7所示。

(点击查看大图)图10.7 所有Locale的数据显示格式

如果Servlet中或者其他Java类中也要显示数据,可以使用JDK自带的NumberFormat类与DateFormat类。这些类会根据客户端Locale自动调整数据显示格式。JSTL标签其实是这些类的标签化。使用代码如下:

代码10.11 NumberI18N.java

package com.helloweenvsfei.i18n; import java.text.DateFormat; import java.text.NumberFormat; import java.util.Date; public class NumberI18N public static void main(String[] args) String s1 = DateFormat.getDateInstance().format(new Date()); // 日期格式 String s2 = DateFormat.getTimeInstance().format(new Date()); // 时间格式 String s3 = DateFormat.getDateTimeInstance().format(new Date()); // 时间日期格式 String n1 = NumberFormat.getInstance().format(10000.2345); // 数字格式 String n2 = NumberFormat.getCurrencyInstance().format(23.34); // 货币格式 String n3 = NumberFormat.getPercentInstance().format(2345.0d); // 百分比格式
参考技术A System.out.println(DateFormat.getDateInstance(DateFormat.FULL, l).format(new Date()));

DateFormat.FULL为输出样式,参加下面的定义
/**
* Constant for full style pattern.
*/
public static final int FULL = 0;
/**
* Constant for long style pattern.
*/
public static final int LONG = 1;
/**
* Constant for medium style pattern.
*/
public static final int MEDIUM = 2;
/**
* Constant for short style pattern.
*/
public static final int SHORT = 3;
/**
* Constant for default style pattern. Its value is MEDIUM.
*/
public static final int DEFAULT = MEDIUM;本回答被提问者采纳
参考技术B Date now=new Date();
system.out.println("当前时间为:"+now.getTime());

Android Locale

Locale 是用来适配语言和地区的。在实际使用过程中,如果使用不当还是会出现错误。

首先,需要了解的是,Locale 分两种,一种是语言,一种是地区。语言比如英语,地区比如美国。区别显而易见,说英语的不止英国,而美国地区语言为英语。所以使用地区还是语言要根据实际需求进行选择。严格来说,如果针对每个地区进行适配,应该使用地区 Locale。这样适配起来才最准确。

Locale 的创建和基本规则 (以下 "!=" 表示 ! equals, 而 == 表示 equals )

Locale.FRANCE != Locale.FRENCH
Locale.FRANCE != Locale("fr")
Locale.FRANCE == Locale("fr", "FR")
Locale.FRENCH == Locale("fr")
Locale("fr") != Locale("fr", "FR")
Locale("us") 错误,因为 "us" 不是语言

 

Locale 获取语言,地区,或者 “语言_地区” 的方法

Locale.getDefault().getLanguage()       ---> en      
Locale.getDefault().getISO3Language()   ---> eng 
Locale.getDefault().getCountry()        ---> US 
Locale.getDefault().getISO3Country()    ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName()    ---> English (United States) 
Locale.getDefault().toString()          ---> en_US
Locale.getDefault().getDisplayLanguage()---> English

 

以上是关于不同地区(Locale)默认时间输出格式的主要内容,如果未能解决你的问题,请参考以下文章

Linux里面locale命令作用是啥?

解决Nextcloud新建用户默认语言是英文且默认地区是美国的方法

linux中的locale,LANG

格式化时间的正确方法是什么,以便Lint不会抱怨隐式使用默认语言环境?

根据国家/地区获取货币符号

Locale java