当我在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”,寻找更通用的方式。 我怎么能这样?
答案 0 :(得分:1)
您可能想使用Locale
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);
答案 1 :(得分:1)
String output = LocalDate.now( ZoneId.of( "America/Montreal" ) ).format( DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( Locale.CANADA_FRENCH ) );
问题和其他答案正在使用旧的过时类(SimpleDateFormat,Date,Calendar等)。
而是使用Java 8及更高版本中内置的java.time框架。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的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();
要生成的字符串localize the format and content表示日期值,请使用DateTimeFormatter
和FormatStyle
来确定长度(完整,长,中,短)。
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
,或使用传递人类语言的各种构造函数,以及可选的国家和变体。
答案 2 :(得分:0)
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 :(得分:0)
您需要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