2012-06-19 40 views
36

Tôi muốn hiển thị ngày sinh dựa trên ngôn ngữ người dùng. Trong ứng dụng của tôi, một trong những lĩnh vực của tôi là ngày sinh mà hiện đang ở định dạng dd/mm/yyyy. Vì vậy, nếu người dùng thay đổi ngôn ngữ của mình thì định dạng ngày cũng sẽ thay đổi tương ứng. Bất kỳ con trỏ hoặc mẫu mã nào thực sự sẽ giúp tôi khắc phục vấn đề.Định dạng ngày dựa trên miền địa phương của người dùng trên android

Trả lời

62

Bạn có thể sử dụng lớp DateFormat định dạng ngày theo ngôn ngữ người dùng.

Ví dụ:

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

Bạn có thể sử dụng các phương pháp khác nhau getLongDateFormat, getMediumDateFormat tùy thuộc vào mức độ tính cách rườm rà mà bạn muốn có.

+3

"DateFormat DateFormat" nên thực sự được viết "java.text.DateFormat Định dạng ngày tháng". Có nhiều phiên bản khác nhau của DateFormat từ các thư viện khác nhau. – AndroidDev

+1

Nhìn vào mã nguồn, 'android.text.format.DateFormat.getDateFormat (context)' đơn giản trả về 'java.text.DateFormat.getDateInstance (java.text.DateFormat.SHORT)'. Thực tế, đối số 'context' thậm chí không được sử dụng. Tôi nghĩ rằng tôi thích chỉ sử dụng 'java.text.DateFormat.getDateInstance (DateFormat.SHORT)' trực tiếp. –

+0

Tôi không có ngày nhập liệu theo loại chuỗi, Tôi có Ngày làm đầu vào – user924

11

Để thay đổi định dạng ngày tháng theo quy định của địa phương, các mã sau đây làm việc với tôi:

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

Sau đó, khi bạn thay đổi vị trí, định dạng ngày sẽ thay đổi dựa trên đó. Để biết thêm thông tin về các mẫu ngày: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

+0

Liên kết bạn cung cấp hữu ích cho tôi. Cảm ơn –

+0

giống tại đây! cảm ơn bạn ! –

6

Api Android cung cấp cách dễ dàng để hiển thị định dạng ngày được bản địa hóa. Mã sau hoạt động.

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

Bạn có thể kiểm tra mã sau.

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

Đơn giản như

Đối với ngày + Thời gian:

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

Đối với chỉ date:

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

Chỉ cần sửa lỗi dán sao chép: Đối với ngày không có thời gian, hãy gọi getDateInstance (không getDateTimeInstance) – Lensflare

Các vấn đề liên quan