2012-06-19 110 views
36

我想基於用戶區域設置顯示出生日期。在我的應用程序中,我的一個領域是出生日期,現在格式爲dd/mm/yyyy。因此,如果用戶更改其語言環境,則日期格式也應相應更改。任何指針或代碼示例都會幫助我克服這個問題。基於Android的用戶區域設置的日期格式

回答

62

您可以使用DateFormat類,該類根據用戶區域設置格式化日期。

例子:

String dateOfBirth = "26/02/1974"; 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date date = null; 
try { 
    date = sdf.parse(dateOfBirth); 
} catch (ParseException e) { 
    // handle exception here ! 
} 
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context); 
String s = dateFormat.format(date); 

您可以使用不同的方法getLongDateFormatgetMediumDateFormat根據詳細程度,你想有。

+3

「日期格式的日期格式」 確實應該寫「java.text.DateFormat中日期格式」。有來自不同庫的不同版本的DateFormat。 – AndroidDev

+1

查看源代碼,'android.text.format.DateFormat.getDateFormat(context)'只返回'java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT)'。實際上,甚至沒有使用'context'參數。我想我更喜歡直接使用'java.text.DateFormat.getDateInstance(DateFormat.SHORT)'。 –

+0

我沒有字符串類型的輸入日期,我有日期作爲輸入 – user924

11

要根據區域設置更改日期格式,下面的代碼工作對我說:

String dateOfBirth = "26/02/1974"; 
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
    Date date = null; 
    try { 
     date = sdf.parse(dateOfBirth); 
    } catch (ParseException e) { 
     // handle exception here ! 
    } 

    String myString = DateFormat.getDateInstance(DateFormat.SHORT).format(date); 

然後,當你改變了語言環境,日期格式將改變基於它。 有關日期模式的更多信息: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

+0

您提供的鏈接對我很有用。謝謝 –

+0

也一樣!謝謝 ! –

6

Android的API提供簡單的方法來顯示本地化的日期格式。 以下代碼有效。

public class FileDateUtil { 
public static String getModifiedDate(long modified) { 
    return getModifiedDate(Locale.getDefault(), modified); 
} 

public static String getModifiedDate(Locale locale, long modified) { 
    SimpleDateFormat dateFormat = null; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
     dateFormat = new SimpleDateFormat(getDateFormat(locale)); 
    } else { 
     dateFormat = new SimpleDateFormat("MMM/dd/yyyy hh:mm:ss aa"); 
    } 

    return dateFormat.format(new Date(modified)); 
} 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) 
public static String getDateFormat(Locale locale) { 
    return DateFormat.getBestDateTimePattern(locale, "MM/dd/yyyy hh:mm:ss aa"); 
} 
} 

您可以查看下面的代碼。

String koreaData = FileDateUtil.getModifiedDate(Locale.KOREA, System.currentTimeMillis()); 
String franceData = FileDateUtil.getModifiedDate(Locale.FRENCH, System.currentTimeMillis()); 
String defaultData = FileDateUtil.getModifiedDate(Locale.getDefault(), System.currentTimeMillis()); 

String result = "Korea : " + koreaData + System.getProperty("line.separator"); 
result += "France : " + franceData + System.getProperty("line.separator"); 
result += "Default : " + defaultData + System.getProperty("line.separator"); 
tv.setText(result); 
5

就這麼簡單

對於日期+時間:

DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, Locale.getDefault()); 

對於剛剛日期:

DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); 
+0

只是爲了糾正複製粘貼錯誤:對於沒有時間的日期,調用getDateInstance(而不是getDateTimeInstance) – Lensflare

相關問題