如何指定区域日期格式?

时间:2016-07-14 08:26:58

标签: java string date timezone

当我在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”,寻找更通用的方式。 我怎么能这样?

4 个答案:

答案 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)

TL;博士

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表示日期值,请使用DateTimeFormatterFormatStyle来确定长度(完整,长,中,短)。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT );

分配特定的Locale而不是JVM的当前默认值。

Locale locale = Locale.CANADA_FRENCH;
formatter = formatter.withLocale( locale );
String output = today.format( formatter );

就是这样,非常简单。只需根据需要定义Locale,例如Locale.CANADALocale.CANADA_FRENCHLocale.GERMANYLocale.KOREA,或使用传递人类语言的各种构造函数,以及可选的国家和变体。

答案 2 :(得分:0)

从[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 :(得分: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