2016-07-14 98 views
0

當我轉換日期爲字符串在Java和適用以下模式:如何指定區域日期格式?

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

輸出:2016年7月14日

但我想如下。

Japan, Korea user : 2016-07-14 
USA, Canada user : 07-14-2016 
Germany, Australia user : 14-07-2016 

我可以設置模式「if〜else」,尋找一個更一般的方法。 我該怎麼辦?

回答

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

OUTPUT:

Japan, Korea user : 2016-07-14 
USA, Canada user : 07-14-2016 
Germany, Australia user : 14-07-2016 
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); 
1

TL;博士

String output = LocalDate.now(ZoneId.of("America/Montreal")).format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.CANADA_FRENCH)); 

詳細

的問題和其他的答案是使用舊的過時的類(SimpleDateFormat的,日期,日曆等)。

改爲使用內置於Java 8及更高版本中的java.time框架。見Oracle Tutorial。許多java.time功能被移植到ThreeTen-Backport中的Java中,並進一步適用於Android的ThreeTenABP

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.CANADA,Locale.CANADA_FRENCH,Locale.GERMANY,Locale.KOREA,或者使用傳遞人類語言的各種構造函數,以及可選的國家和變體。