不同地区(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)
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)默认时间输出格式的主要内容,如果未能解决你的问题,请参考以下文章
解决Nextcloud新建用户默认语言是英文且默认地区是美国的方法