当我在java上将日期转换为字符串并应用以下模式时:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
产量 : 2016-07-14
但我想如下。
Japan, Korea user : 2016-07-14
USA, Canada user : 07-14-2016
Germany, Australia user : 14-07-2016
我可以设置模式"if~else",寻找更通用的方法。我怎么能这样?
希望使用区域设置
Locale locale = Locale.KOREA; // select any locale you want
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
String formattedDate = df.format(yourDate);
System.out.println(formattedDate);
tl;dr
String output = LocalDate.now( ZoneId.of( "America/Montreal" ) ).format( DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( Locale.CANADA_FRENCH ) );
详
问题和其他答案使用旧的过时的类(简单日期格式,日期,日历等)。
而是使用Java 8及更高版本中内置的java.time框架。请参阅甲骨文教程。Java.time的大部分功能在ThreeTen-Backport中向后移植到Java 6和7,并在ThreeTenABP中进一步适应Android。
LocalDate
类表示没有时间且没有时区的仅日期值。
要获取当前日期,您需要一个时区。对于任何给定时刻,日期在全球范围内按时区变化。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
要获取标准 ISO 8601 格式 YYYY-MM-DD,请拨打 toString
。
String output = today.toString();
若要本地化生成的字符串的格式和内容以表示日期值,请使用带有FormatStyle
的DateTimeFormatter
来确定长度(完整、长、中、短)。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT );
分配特定的Locale
,而不是 JVM 的当前默认值。
Locale locale = Locale.CANADA_FRENCH;
formatter = formatter.withLocale( locale );
String output = today.format( formatter );
就是这样,很简单。只需根据需要定义一个Locale
,例如Locale.CANADA
、Locale.CANADA_FRENCH
、Locale.GERMANY
、Locale.KOREA
,或者使用传递人类语言的各种构造函数,以及可选的国家和变体。
从 [http://www.java2s.com/Tutorial/Java/0040__Data-Type/FourdifferentdateformatsforfourcountriesUSUKGERMANYFRANCE.htm ] 中尝试此操作
import static java.util.Locale.*;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class MainClass {
public static void main(String[] args) {
Date today = new Date();
Locale[] locales = { US, UK, GERMANY, FRANCE,JAPAN };
int[] styles = { FULL, LONG, MEDIUM, SHORT };
String[] styleNames = { "FULL", "LONG", "MEDIUM", "SHORT" };
DateFormat fmt = null;
for (Locale locale : locales) {
System.out.println("nThe Date for " + locale.getDisplayCountry() + ":");
for (int i = 0; i < styles.length; i++) {
fmt = DateFormat.getDateInstance(styles[i], locale);
System.out.println("tIn " + styleNames[i] + " is " + fmt.format(today));
}
}
}
}
你需要 3 SimpleDateFormat
:
public static void main(String[] args) {
// Japan, Korea user : 2016-07-14
SimpleDateFormat korea = new SimpleDateFormat("yyyy-MM-dd");
// USA, Canada user : 07-14-2016
SimpleDateFormat usa = new SimpleDateFormat("MM-dd-yyyy");
// Germany, Australia user : 14-07-2016
SimpleDateFormat europe = new SimpleDateFormat("dd-MM-yyyy");
System.out.println("Japan, Korea user : " + korea.format(new Date()));
System.out.println("USA, Canada user : " + usa.format(new Date()));
System.out.println("Germany, Australia user : " + europe.format(new Date()));
}
输出:
Japan, Korea user : 2016-07-14
USA, Canada user : 07-14-2016
Germany, Australia user : 14-07-2016