【问题标题】:How can I specify the regional date format?如何指定区域日期格式?
【发布时间】:2016-07-14 08:26:57
【问题描述】:

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

【问题讨论】:

    标签: java string date timezone


    【解决方案1】:

    您可能想使用语言环境

    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);
    

    【讨论】:

      【解决方案2】:

      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 功能在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();
      

      要生成的字符串的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,或者使用各种构造函数来传递人类语言,以及可选的国家和变体。

      【讨论】:

        【解决方案3】:

        从 [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));
                  }
                }
              }
            }
        

        【讨论】:

          【解决方案4】:

          你需要 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-22
            • 2017-03-08
            • 1970-01-01
            • 1970-01-01
            • 2018-07-02
            • 2014-12-17
            • 2017-02-26
            相关资源
            最近更新 更多